Removed broken code. Update formatter for precision. Fix of panic.

This commit is contained in:
Christoffer Lerno
2023-09-05 19:51:40 +02:00
parent 69418ba44d
commit e3412da033
5 changed files with 23 additions and 1354 deletions

View File

@@ -92,7 +92,7 @@ struct CallstackElement
fn void default_panic(String message, String file, String function, uint line)
{
CallstackElement* stack = $$stacktrace();
$if $defined(io::stderr) && $defined(File.printf):
$if $defined(io::stderr) && $defined(Stream.printf):
if (stack) stack = stack.prev;
if (stack)
{

View File

@@ -121,8 +121,14 @@ fn usz! Formatter.out_str(&self, any arg) @private
unreachable();
case SIGNED_INT:
case UNSIGNED_INT:
PrintFlags flags = self.flags;
defer self.flags = flags;
self.flags = {};
return self.ntoa_any(arg, 10);
case FLOAT:
PrintFlags flags = self.flags;
defer self.flags = flags;
self.flags = {};
return self.ftoa(float_from_any(arg)!!);
case BOOL:
return self.out_substr(*(bool*)arg.ptr ? "true" : "false");
@@ -163,9 +169,15 @@ fn usz! Formatter.out_str(&self, any arg) @private
}
return self.out_str(any { arg.ptr, arg.type.inner });
case POINTER:
PrintFlags flags = self.flags;
self.flags = {};
defer self.flags = flags;
return self.ntoa_any(arg, 16);
case ARRAY:
// this is SomeType[*] so grab the "SomeType"
PrintFlags flags = self.flags;
defer self.flags = flags;
self.flags = {};
typeid inner = arg.type.inner;
usz size = inner.sizeof;
usz alen = arg.type.len;
@@ -181,6 +193,9 @@ fn usz! Formatter.out_str(&self, any arg) @private
len += self.out(']')!;
return len;
case VECTOR:
PrintFlags flags = self.flags;
defer self.flags = flags;
self.flags = {};
// this is SomeType[*] so grab the "SomeType"
typeid inner = arg.type.inner;
usz size = inner.sizeof;
@@ -204,6 +219,9 @@ fn usz! Formatter.out_str(&self, any arg) @private
return self.out_substr(*(String*)arg);
}
if (inner == void.typeid) inner = char.typeid;
PrintFlags flags = self.flags;
defer self.flags = flags;
self.flags = {};
usz size = inner.sizeof;
// Pretend this is a String
String* temp = (void*)arg.ptr;
@@ -347,38 +365,17 @@ fn usz! Formatter.vprintf(&self, String format, any[] anys)
self.out_char(current)!;
continue;
case 's':
PrintFlags flags = self.flags;
uint width = self.width;
String str;
if (flags.precision)
{
switch (s = current)
{
case String:
if (s.len > self.prec)
{
str = (*s)[:self.prec];
current = &str;
}
}
}
defer {
self.flags = flags;
self.width = width;
}
self.flags = {};
self.width = 0;
if (flags.left)
if (self.flags.left)
{
usz len = self.out_str(current)!;
self.pad(' ', width, len)!;
self.pad(' ', self.width, len)!;
continue;
}
OutputFn out_fn = self.out_fn;
self.out_fn = (OutputFn)&out_null_fn;
usz len = self.out_str(current)!;
self.out_fn = out_fn;
self.pad(' ', width, len)!;
self.pad(' ', self.width, len)!;
self.out_str(current)!;
continue;
case 'p':

View File

@@ -1,259 +0,0 @@
module sdl;
const uint INIT_TIMER = 0x00000001;
const uint INIT_AUDIO = 0x00000010;
const uint INIT_VIDEO = 0x00000020; /**< INIT_VIDEO implies INIT_EVENTS */
const uint INIT_JOYSTICK = 0x00000200; /**< INIT_JOYSTICK implies INIT_EVENTS */
const uint INIT_HAPTIC = 0x00001000;
const uint INIT_GAMECONTROLLER = 0x00002000; /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */
const uint INIT_EVENTS = 0x00004000;
const uint INIT_SENSOR = 0x00008000;
const uint INIT_NOPARACHUTE = 0x00100000; /**< compatibility; this flag is ignored. */
//const uint INIT_EVERYTHING = INIT_TIMER | INIT_AUDIO | INIT_VIDEO | INIT_EVENTS |
// INIT_JOYSTICK | INIT_HAPTIC | INIT_GAMECONTROLLER | INIT_SENSOR;
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
//The window we'll be rendering to
void* gWindow = null;
//The surface contained by the window
void* gScreenSurface = null;
extern fn int init(uint flags) @extern("SDL_Init");
extern fn int initSubSystem(uint flags) @extern("SDL_InitSubSystem");
extern fn void quitSubSystem(uint flags) @extern("SDL_QuitSubSystem");
extern fn uint wasInit(uint flags) @extern("SDL_WasInit");
extern fn void quit() @extern("SDL_Quit");
enum SDLWindowFlags : c_int
{
FULLSCREEN = 0x00000001, /**< fullscreen window */
OPENGL = 0x00000002, /**< window usable with OpenGL context */
SHOWN = 0x00000004, /**< window is visible */
HIDDEN = 0x00000008, /**< window is not visible */
BORDERLESS = 0x00000010, /**< no window decoration */
RESIZABLE = 0x00000020, /**< window can be resized */
MINIMIZED = 0x00000040, /**< window is minimized */
MAXIMIZED = 0x00000080, /**< window is maximized */
INPUT_GRABBED = 0x00000100, /**< window has grabbed input focus */
INPUT_FOCUS = 0x00000200, /**< window has input focus */
MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */
FULLSCREEN_DESKTOP = 0x00001001,
FOREIGN = 0x00000800, /**< window not created by SDL */
ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported.
On macOS NSHighResolutionCapable must be set true in the
application's Info.plist for this to have any effect. */
MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to INPUT_GRABBED) */
ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */
SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */
UTILITY = 0x00020000, /**< window should be treated as a utility window */
TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */
POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */
VULKAN = 0x10000000 /**< window usable for Vulkan surface */
}
extern fn void* createWindow(char *title, uint x, uint y, int w, int h, uint flags) @extern("SDL_CreateWindow");
extern fn void* getWindowSurface(void *window) @extern("SDL_GetWindowSurface");
const uint WINDOWPOS_UNDEFINED_MASK = 0x1FFF0000;
extern fn int exit(int code);
extern fn int printf(char *mess, ...);
fn bool initX()
{
//Initialization flag
bool success = true;
//Initialize SDL
if (init(INIT_VIDEO) < 0)
{
printf( "SDL could not initialize!");
exit(-1);
}
//Create window
gWindow = createWindow( "SDL from C3", WINDOWPOS_UNDEFINED_MASK, WINDOWPOS_UNDEFINED_MASK, SCREEN_WIDTH, SCREEN_HEIGHT, (uint)(SDLWindowFlags.SHOWN));
if (!gWindow) exit(-1);
//Get window surface
gScreenSurface = getWindowSurface(gWindow);
return true;
}
fn void close()
{
//Destroy window
// SDL_DestroyWindow( gWindow );
// gWindow = NULL;
//Quit SDL subsystems
quit();
}
extern fn int pollEvent(SDL_Event *event) @extern("SDL_PollEvent");
extern fn int updateWindowSurface(void *window) @extern("SDL_UpdateWindowSurface");
enum SDLEventType : uint
{
QUIT = 0x100, /**< User-requested quit */
/* These application events have special meaning on iOS, see README-ios.md for details */
APP_TERMINATING, /**< The application is being terminated by the OS
Called on iOS in applicationWillTerminate()
Called on Android in onDestroy()
*/
APP_LOWMEMORY, /**< The application is low on memory, free memory if possible.
Called on iOS in applicationDidReceiveMemoryWarning()
Called on Android in onLowMemory()
*/
APP_WILLENTERBACKGROUND, /**< The application is about to enter the background
Called on iOS in applicationWillResignActive()
Called on Android in onPause()
*/
APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time
Called on iOS in applicationDidEnterBackground()
Called on Android in onPause()
*/
APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground
Called on iOS in applicationWillEnterForeground()
Called on Android in onResume()
*/
APP_DIDENTERFOREGROUND, /**< The application is now interactive
Called on iOS in applicationDidBecomeActive()
Called on Android in onResume()
*/
/* Display events */
DISPLAYEVENT = 0x150, /**< Display state change */
/* Window events */
WINDOWEVENT = 0x200, /**< Window state change */
SYSWMEVENT, /**< System specific event */
/* Keyboard events */
KEYDOWN = 0x300, /**< Key pressed */
KEYUP, /**< Key released */
TEXTEDITING, /**< Keyboard text editing (composition) */
TEXTINPUT, /**< Keyboard text input */
KEYMAPCHANGED, /**< Keymap changed due to a system event such as an
input language or keyboard layout change.
*/
/* Mouse events */
MOUSEMOTION = 0x400, /**< Mouse moved */
MOUSEBUTTONDOWN, /**< Mouse button pressed */
MOUSEBUTTONUP, /**< Mouse button released */
MOUSEWHEEL, /**< Mouse wheel motion */
/* Joystick events */
JOYAXISMOTION = 0x600, /**< Joystick axis motion */
JOYBALLMOTION, /**< Joystick trackball motion */
JOYHATMOTION, /**< Joystick hat position change */
JOYBUTTONDOWN, /**< Joystick button pressed */
JOYBUTTONUP, /**< Joystick button released */
JOYDEVICEADDED, /**< A new joystick has been inserted into the system */
JOYDEVICEREMOVED, /**< An opened joystick has been removed */
/* Game controller events */
CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */
CONTROLLERBUTTONDOWN, /**< Game controller button pressed */
CONTROLLERBUTTONUP, /**< Game controller button released */
CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */
CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */
CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */
/* Touch events */
FINGERDOWN = 0x700,
FINGERUP,
FINGERMOTION,
/* Gesture events */
DOLLARGESTURE = 0x800,
DOLLARRECORD,
MULTIGESTURE,
/* Clipboard events */
CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */
/* Drag and drop events */
DROPFILE = 0x1000, /**< The system requests a file open */
DROPTEXT, /**< text/plain drag-and-drop event */
DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */
DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */
/* Audio hotplug events */
AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */
AUDIODEVICEREMOVED, /**< An audio device has been removed. */
/* Sensor events */
SENSORUPDATE = 0x1200, /**< A sensor was updated */
/* Render events */
RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */
RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */
/** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use,
* and should be allocated with SDL_RegisterEvents()
*/
USEREVENT = 0x8000,
/**
* This last event is only for bounding internal arrays
*/
LASTEVENT = 0xFFFF
}
struct CommonEvent
{
SDLEventType type;
uint timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
}
union SDL_Event
{
SDLEventType type; /**< Event type, shared with all events */
CommonEvent common; /**< Common event data */
byte[56] padding;
}
const uint SDL_QUIT = 0x100;
fn int main(int argc, char** args)
{
initX();
//Main loop flag
bool quitd = false;
//Event handler
SDL_Event e;
//While application is running
while (!quitd)
{
//Handle events on queue
while (pollEvent(&e) != 0)
{
//User requests quit
if (e.type == SDLEventType.QUIT)
{
printf("Quit!!\n");
quitd = true;
}
}
//Apply the image
//SDL_BlitSurface( gXOut, NULL, gScreenSurface, NULL );
//Update the surface
updateWindowSurface(gWindow);
}
close();
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
#define COMPILER_VERSION "0.4.634"
#define COMPILER_VERSION "0.4.635"