mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-02 03:58:11 +00:00
git normalize all files
This commit is contained in:
+191
-191
@@ -1,191 +1,191 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DRAW_H
|
||||
#define DRAW_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Fancy String Types
|
||||
|
||||
typedef struct D_FancyString D_FancyString;
|
||||
struct D_FancyString
|
||||
{
|
||||
F_Tag font;
|
||||
String8 string;
|
||||
Vec4F32 color;
|
||||
F32 size;
|
||||
F32 underline_thickness;
|
||||
F32 strikethrough_thickness;
|
||||
};
|
||||
|
||||
typedef struct D_FancyStringNode D_FancyStringNode;
|
||||
struct D_FancyStringNode
|
||||
{
|
||||
D_FancyStringNode *next;
|
||||
D_FancyString v;
|
||||
};
|
||||
|
||||
typedef struct D_FancyStringList D_FancyStringList;
|
||||
struct D_FancyStringList
|
||||
{
|
||||
D_FancyStringNode *first;
|
||||
D_FancyStringNode *last;
|
||||
U64 node_count;
|
||||
U64 total_size;
|
||||
};
|
||||
|
||||
typedef struct D_FancyRun D_FancyRun;
|
||||
struct D_FancyRun
|
||||
{
|
||||
F_Run run;
|
||||
Vec4F32 color;
|
||||
F32 underline_thickness;
|
||||
F32 strikethrough_thickness;
|
||||
};
|
||||
|
||||
typedef struct D_FancyRunNode D_FancyRunNode;
|
||||
struct D_FancyRunNode
|
||||
{
|
||||
D_FancyRunNode *next;
|
||||
D_FancyRun v;
|
||||
};
|
||||
|
||||
typedef struct D_FancyRunList D_FancyRunList;
|
||||
struct D_FancyRunList
|
||||
{
|
||||
D_FancyRunNode *first;
|
||||
D_FancyRunNode *last;
|
||||
U64 node_count;
|
||||
Vec2F32 dim;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Generated Code
|
||||
|
||||
#include "generated/draw.meta.h"
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Draw Bucket Types
|
||||
|
||||
typedef struct D_Bucket D_Bucket;
|
||||
struct D_Bucket
|
||||
{
|
||||
R_PassList passes;
|
||||
U64 stack_gen;
|
||||
U64 last_cmd_stack_gen;
|
||||
D_BucketStackDecls;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Thread Context
|
||||
|
||||
typedef struct D_BucketSelectionNode D_BucketSelectionNode;
|
||||
struct D_BucketSelectionNode
|
||||
{
|
||||
D_BucketSelectionNode *next;
|
||||
D_Bucket *bucket;
|
||||
};
|
||||
|
||||
typedef struct D_ThreadCtx D_ThreadCtx;
|
||||
struct D_ThreadCtx
|
||||
{
|
||||
Arena *arena;
|
||||
U64 arena_frame_start_pos;
|
||||
D_BucketSelectionNode *top_bucket;
|
||||
D_BucketSelectionNode *free_bucket_selection;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Globals
|
||||
|
||||
thread_static D_ThreadCtx *d_thread_ctx = 0;
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Basic Helpers
|
||||
|
||||
internal U64 d_hash_from_string(String8 string);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Fancy String Type Functions
|
||||
|
||||
internal void d_fancy_string_list_push(Arena *arena, D_FancyStringList *list, D_FancyString *str);
|
||||
internal void d_fancy_string_list_concat_in_place(D_FancyStringList *dst, D_FancyStringList *to_push);
|
||||
internal String8 d_string_from_fancy_string_list(Arena *arena, D_FancyStringList *list);
|
||||
internal D_FancyRunList d_fancy_run_list_from_fancy_string_list(Arena *arena, F32 tab_size_px, F_RasterFlags flags, D_FancyStringList *strs);
|
||||
internal D_FancyRunList d_fancy_run_list_copy(Arena *arena, D_FancyRunList *src);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Top-Level API
|
||||
//
|
||||
// (Frame boundaries & bucket submission)
|
||||
|
||||
internal void d_begin_frame(void);
|
||||
internal void d_submit_bucket(OS_Handle os_window, R_Handle r_window, D_Bucket *bucket);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Bucket Construction & Selection API
|
||||
//
|
||||
// (Bucket: Handle to sequence of many render passes, constructed by this layer)
|
||||
|
||||
internal D_Bucket *d_bucket_make(void);
|
||||
internal void d_push_bucket(D_Bucket *bucket);
|
||||
internal void d_pop_bucket(void);
|
||||
internal D_Bucket *d_top_bucket(void);
|
||||
#define D_BucketScope(b) DeferLoop(d_push_bucket(b), d_pop_bucket())
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Bucket Stacks
|
||||
//
|
||||
// (Pushing/popping implicit draw parameters)
|
||||
|
||||
internal R_Tex2DSampleKind d_push_tex2d_sample_kind(R_Tex2DSampleKind v);
|
||||
internal Mat3x3F32 d_push_xform2d(Mat3x3F32 v);
|
||||
internal Rng2F32 d_push_clip(Rng2F32 v);
|
||||
internal F32 d_push_transparency(F32 v);
|
||||
internal R_Tex2DSampleKind d_pop_tex2d_sample_kind(void);
|
||||
internal Mat3x3F32 d_pop_xform2d(void);
|
||||
internal Rng2F32 d_pop_clip(void);
|
||||
internal F32 d_pop_transparency(void);
|
||||
internal R_Tex2DSampleKind d_top_tex2d_sample_kind(void);
|
||||
internal Mat3x3F32 d_top_xform2d(void);
|
||||
internal Rng2F32 d_top_clip(void);
|
||||
internal F32 d_top_transparency(void);
|
||||
|
||||
#define D_Tex2DSampleKindScope(v) DeferLoop(d_push_tex2d_sample_kind(v), d_pop_tex2d_sample_kind())
|
||||
#define D_XForm2DScope(v) DeferLoop(d_push_xform2d(v), d_pop_xform2d())
|
||||
#define D_ClipScope(v) DeferLoop(d_push_clip(v), d_pop_clip())
|
||||
#define D_TransparencyScope(v) DeferLoop(d_push_transparency(v), d_pop_transparency())
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Core Draw Calls
|
||||
//
|
||||
// (Apply to the calling thread's currently selected bucket)
|
||||
|
||||
//- rjf: rectangles
|
||||
internal inline R_Rect2DInst *d_rect(Rng2F32 dst, Vec4F32 color, F32 corner_radius, F32 border_thickness, F32 edge_softness);
|
||||
|
||||
//- rjf: images
|
||||
internal inline R_Rect2DInst *d_img(Rng2F32 dst, Rng2F32 src, R_Handle texture, Vec4F32 color, F32 corner_radius, F32 border_thickness, F32 edge_softness);
|
||||
|
||||
//- rjf: blurs
|
||||
internal R_PassParams_Blur *d_blur(Rng2F32 rect, F32 blur_size, F32 corner_radius);
|
||||
|
||||
//- rjf: 3d rendering pass params
|
||||
internal R_PassParams_Geo3D *d_geo3d_begin(Rng2F32 viewport, Mat4x4F32 view, Mat4x4F32 projection);
|
||||
|
||||
//- rjf: meshes
|
||||
internal R_Mesh3DInst *d_mesh(R_Handle mesh_vertices, R_Handle mesh_indices, R_GeoTopologyKind mesh_geo_topology, R_GeoVertexFlags mesh_geo_vertex_flags, R_Handle albedo_tex, Mat4x4F32 inst_xform);
|
||||
|
||||
//- rjf: collating one pre-prepped bucket into parent bucket
|
||||
internal void d_sub_bucket(D_Bucket *bucket);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Draw Call Helpers
|
||||
|
||||
//- rjf: text
|
||||
internal void d_truncated_fancy_run_list(Vec2F32 p, D_FancyRunList *list, F32 max_x, F_Run trailer_run);
|
||||
internal void d_truncated_fancy_run_fuzzy_matches(Vec2F32 p, D_FancyRunList *list, F32 max_x, FuzzyMatchRangeList *ranges, Vec4F32 color);
|
||||
internal void d_text_run(Vec2F32 p, Vec4F32 color, F_Run run);
|
||||
internal void d_text(F_Tag font, F32 size, F32 base_align_px, F32 tab_size_px, F_RasterFlags flags, Vec2F32 p, Vec4F32 color, String8 string);
|
||||
|
||||
#endif // DRAW_H
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DRAW_H
|
||||
#define DRAW_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Fancy String Types
|
||||
|
||||
typedef struct D_FancyString D_FancyString;
|
||||
struct D_FancyString
|
||||
{
|
||||
F_Tag font;
|
||||
String8 string;
|
||||
Vec4F32 color;
|
||||
F32 size;
|
||||
F32 underline_thickness;
|
||||
F32 strikethrough_thickness;
|
||||
};
|
||||
|
||||
typedef struct D_FancyStringNode D_FancyStringNode;
|
||||
struct D_FancyStringNode
|
||||
{
|
||||
D_FancyStringNode *next;
|
||||
D_FancyString v;
|
||||
};
|
||||
|
||||
typedef struct D_FancyStringList D_FancyStringList;
|
||||
struct D_FancyStringList
|
||||
{
|
||||
D_FancyStringNode *first;
|
||||
D_FancyStringNode *last;
|
||||
U64 node_count;
|
||||
U64 total_size;
|
||||
};
|
||||
|
||||
typedef struct D_FancyRun D_FancyRun;
|
||||
struct D_FancyRun
|
||||
{
|
||||
F_Run run;
|
||||
Vec4F32 color;
|
||||
F32 underline_thickness;
|
||||
F32 strikethrough_thickness;
|
||||
};
|
||||
|
||||
typedef struct D_FancyRunNode D_FancyRunNode;
|
||||
struct D_FancyRunNode
|
||||
{
|
||||
D_FancyRunNode *next;
|
||||
D_FancyRun v;
|
||||
};
|
||||
|
||||
typedef struct D_FancyRunList D_FancyRunList;
|
||||
struct D_FancyRunList
|
||||
{
|
||||
D_FancyRunNode *first;
|
||||
D_FancyRunNode *last;
|
||||
U64 node_count;
|
||||
Vec2F32 dim;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Generated Code
|
||||
|
||||
#include "generated/draw.meta.h"
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Draw Bucket Types
|
||||
|
||||
typedef struct D_Bucket D_Bucket;
|
||||
struct D_Bucket
|
||||
{
|
||||
R_PassList passes;
|
||||
U64 stack_gen;
|
||||
U64 last_cmd_stack_gen;
|
||||
D_BucketStackDecls;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Thread Context
|
||||
|
||||
typedef struct D_BucketSelectionNode D_BucketSelectionNode;
|
||||
struct D_BucketSelectionNode
|
||||
{
|
||||
D_BucketSelectionNode *next;
|
||||
D_Bucket *bucket;
|
||||
};
|
||||
|
||||
typedef struct D_ThreadCtx D_ThreadCtx;
|
||||
struct D_ThreadCtx
|
||||
{
|
||||
Arena *arena;
|
||||
U64 arena_frame_start_pos;
|
||||
D_BucketSelectionNode *top_bucket;
|
||||
D_BucketSelectionNode *free_bucket_selection;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Globals
|
||||
|
||||
thread_static D_ThreadCtx *d_thread_ctx = 0;
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Basic Helpers
|
||||
|
||||
internal U64 d_hash_from_string(String8 string);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Fancy String Type Functions
|
||||
|
||||
internal void d_fancy_string_list_push(Arena *arena, D_FancyStringList *list, D_FancyString *str);
|
||||
internal void d_fancy_string_list_concat_in_place(D_FancyStringList *dst, D_FancyStringList *to_push);
|
||||
internal String8 d_string_from_fancy_string_list(Arena *arena, D_FancyStringList *list);
|
||||
internal D_FancyRunList d_fancy_run_list_from_fancy_string_list(Arena *arena, F32 tab_size_px, F_RasterFlags flags, D_FancyStringList *strs);
|
||||
internal D_FancyRunList d_fancy_run_list_copy(Arena *arena, D_FancyRunList *src);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Top-Level API
|
||||
//
|
||||
// (Frame boundaries & bucket submission)
|
||||
|
||||
internal void d_begin_frame(void);
|
||||
internal void d_submit_bucket(OS_Handle os_window, R_Handle r_window, D_Bucket *bucket);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Bucket Construction & Selection API
|
||||
//
|
||||
// (Bucket: Handle to sequence of many render passes, constructed by this layer)
|
||||
|
||||
internal D_Bucket *d_bucket_make(void);
|
||||
internal void d_push_bucket(D_Bucket *bucket);
|
||||
internal void d_pop_bucket(void);
|
||||
internal D_Bucket *d_top_bucket(void);
|
||||
#define D_BucketScope(b) DeferLoop(d_push_bucket(b), d_pop_bucket())
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Bucket Stacks
|
||||
//
|
||||
// (Pushing/popping implicit draw parameters)
|
||||
|
||||
internal R_Tex2DSampleKind d_push_tex2d_sample_kind(R_Tex2DSampleKind v);
|
||||
internal Mat3x3F32 d_push_xform2d(Mat3x3F32 v);
|
||||
internal Rng2F32 d_push_clip(Rng2F32 v);
|
||||
internal F32 d_push_transparency(F32 v);
|
||||
internal R_Tex2DSampleKind d_pop_tex2d_sample_kind(void);
|
||||
internal Mat3x3F32 d_pop_xform2d(void);
|
||||
internal Rng2F32 d_pop_clip(void);
|
||||
internal F32 d_pop_transparency(void);
|
||||
internal R_Tex2DSampleKind d_top_tex2d_sample_kind(void);
|
||||
internal Mat3x3F32 d_top_xform2d(void);
|
||||
internal Rng2F32 d_top_clip(void);
|
||||
internal F32 d_top_transparency(void);
|
||||
|
||||
#define D_Tex2DSampleKindScope(v) DeferLoop(d_push_tex2d_sample_kind(v), d_pop_tex2d_sample_kind())
|
||||
#define D_XForm2DScope(v) DeferLoop(d_push_xform2d(v), d_pop_xform2d())
|
||||
#define D_ClipScope(v) DeferLoop(d_push_clip(v), d_pop_clip())
|
||||
#define D_TransparencyScope(v) DeferLoop(d_push_transparency(v), d_pop_transparency())
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Core Draw Calls
|
||||
//
|
||||
// (Apply to the calling thread's currently selected bucket)
|
||||
|
||||
//- rjf: rectangles
|
||||
internal inline R_Rect2DInst *d_rect(Rng2F32 dst, Vec4F32 color, F32 corner_radius, F32 border_thickness, F32 edge_softness);
|
||||
|
||||
//- rjf: images
|
||||
internal inline R_Rect2DInst *d_img(Rng2F32 dst, Rng2F32 src, R_Handle texture, Vec4F32 color, F32 corner_radius, F32 border_thickness, F32 edge_softness);
|
||||
|
||||
//- rjf: blurs
|
||||
internal R_PassParams_Blur *d_blur(Rng2F32 rect, F32 blur_size, F32 corner_radius);
|
||||
|
||||
//- rjf: 3d rendering pass params
|
||||
internal R_PassParams_Geo3D *d_geo3d_begin(Rng2F32 viewport, Mat4x4F32 view, Mat4x4F32 projection);
|
||||
|
||||
//- rjf: meshes
|
||||
internal R_Mesh3DInst *d_mesh(R_Handle mesh_vertices, R_Handle mesh_indices, R_GeoTopologyKind mesh_geo_topology, R_GeoVertexFlags mesh_geo_vertex_flags, R_Handle albedo_tex, Mat4x4F32 inst_xform);
|
||||
|
||||
//- rjf: collating one pre-prepped bucket into parent bucket
|
||||
internal void d_sub_bucket(D_Bucket *bucket);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Draw Call Helpers
|
||||
|
||||
//- rjf: text
|
||||
internal void d_truncated_fancy_run_list(Vec2F32 p, D_FancyRunList *list, F32 max_x, F_Run trailer_run);
|
||||
internal void d_truncated_fancy_run_fuzzy_matches(Vec2F32 p, D_FancyRunList *list, F32 max_x, FuzzyMatchRangeList *ranges, Vec4F32 color);
|
||||
internal void d_text_run(Vec2F32 p, Vec4F32 color, F_Run run);
|
||||
internal void d_text(F_Tag font, F32 size, F32 base_align_px, F32 tab_size_px, F_RasterFlags flags, Vec2F32 p, Vec4F32 color, String8 string);
|
||||
|
||||
#endif // DRAW_H
|
||||
|
||||
+58
-58
@@ -1,58 +1,58 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
@table(name, name_lower, type, default_init)
|
||||
D_StackTable:
|
||||
{
|
||||
{Tex2DSampleKind tex2d_sample_kind R_Tex2DSampleKind `R_Tex2DSampleKind_Nearest` }
|
||||
{XForm2D xform2d Mat3x3F32 `{1, 0, 0, 0, 1, 0, 0, 0, 1}` }
|
||||
{Clip clip Rng2F32 `{0}` }
|
||||
{Transparency transparency F32 `0` }
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
@expand(D_StackTable a) `typedef struct D_$(a.name)Node D_$(a.name)Node; struct D_$(a.name)Node {D_$(a.name)Node *next; $(a.type) v;};`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`#define D_BucketStackDecls struct{\\`;
|
||||
@expand(D_StackTable a) `D_$(a.name)Node *top_$(a.name_lower);\\`;
|
||||
`}`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
@expand(D_StackTable a) `read_only global D_$(a.name)Node d_nil_$(a.name_lower) = {0, $(a.default_init)};`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`#define D_BucketStackInits(b) do{\\`;
|
||||
@expand(D_StackTable a) `(b)->top_$(a.name_lower) = &d_nil_$(a.name_lower);\\`;
|
||||
`}while(0)`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`#if 0`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_push_$(a.name_lower)($(a.type) v);`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_pop_$(a.name_lower)(void);`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_top_$(a.name_lower)(void);`;
|
||||
`#endif`;
|
||||
}
|
||||
|
||||
@gen @c_file
|
||||
{
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_push_$(a.name_lower)($(a.type) v) {D_StackPushImpl($(a.name), $(a.name_lower), $(a.type), v);}`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_pop_$(a.name_lower)(void) {D_StackPopImpl($(a.name), $(a.name_lower), $(a.type));}`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_top_$(a.name_lower)(void) {D_StackTopImpl($(a.name), $(a.name_lower), $(a.type));}`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`#if 0`;
|
||||
@expand(D_StackTable a) `#define D_$(a.name)Scope(v) $(=>35) DeferLoop(d_push_$(a.name_lower)(v), d_pop_$(a.name_lower)())`;
|
||||
`#endif`;
|
||||
}
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
@table(name, name_lower, type, default_init)
|
||||
D_StackTable:
|
||||
{
|
||||
{Tex2DSampleKind tex2d_sample_kind R_Tex2DSampleKind `R_Tex2DSampleKind_Nearest` }
|
||||
{XForm2D xform2d Mat3x3F32 `{1, 0, 0, 0, 1, 0, 0, 0, 1}` }
|
||||
{Clip clip Rng2F32 `{0}` }
|
||||
{Transparency transparency F32 `0` }
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
@expand(D_StackTable a) `typedef struct D_$(a.name)Node D_$(a.name)Node; struct D_$(a.name)Node {D_$(a.name)Node *next; $(a.type) v;};`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`#define D_BucketStackDecls struct{\\`;
|
||||
@expand(D_StackTable a) `D_$(a.name)Node *top_$(a.name_lower);\\`;
|
||||
`}`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
@expand(D_StackTable a) `read_only global D_$(a.name)Node d_nil_$(a.name_lower) = {0, $(a.default_init)};`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`#define D_BucketStackInits(b) do{\\`;
|
||||
@expand(D_StackTable a) `(b)->top_$(a.name_lower) = &d_nil_$(a.name_lower);\\`;
|
||||
`}while(0)`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`#if 0`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_push_$(a.name_lower)($(a.type) v);`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_pop_$(a.name_lower)(void);`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_top_$(a.name_lower)(void);`;
|
||||
`#endif`;
|
||||
}
|
||||
|
||||
@gen @c_file
|
||||
{
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_push_$(a.name_lower)($(a.type) v) {D_StackPushImpl($(a.name), $(a.name_lower), $(a.type), v);}`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_pop_$(a.name_lower)(void) {D_StackPopImpl($(a.name), $(a.name_lower), $(a.type));}`;
|
||||
@expand(D_StackTable a) `internal $(a.type) $(=>35) d_top_$(a.name_lower)(void) {D_StackTopImpl($(a.name), $(a.name_lower), $(a.type));}`;
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`#if 0`;
|
||||
@expand(D_StackTable a) `#define D_$(a.name)Scope(v) $(=>35) DeferLoop(d_push_$(a.name_lower)(v), d_pop_$(a.name_lower)())`;
|
||||
`#endif`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user