FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
daScript/src/misc/daScriptC.cpp at master · throwthisaway/daScript · GitHub
throwthisaway
/
daScript
Public
forked from
GaijinEntertainment/daScript
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
daScript
/
src
/
misc
/
daScriptC.cpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
278 lines (230 loc) · 10.7 KB
Breadcrumbs
daScript
/
src
/
misc
/
daScriptC.cpp
Copy path
File metadata and controls
278 lines (230 loc) · 10.7 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
#
include
"
daScript/misc/platform.h
"
#
include
"
daScript/daScript.h
"
#
include
"
daScript/daScriptC.h
"
using
namespace
das
;
namespace
das
{
struct
SimNode_CFuncCall
: SimNode_ExtFuncCallBase {
SimNode_CFuncCall
(
const
LineInfo & at,
const
char
* fnName, das_interop_function *
FN
)
: SimNode_ExtFuncCallBase(at,fnName) { fn =
FN
; }
virtual
vec4f
DAS_EVAL_ABI
eval
( Context & context )
override
{
DAS_PROFILE_NODE
vec4f * args = (vec4f *)(
alloca
(nArguments *
sizeof
(vec4f)));
evalArgs
(context, args);
return
(*fn)((das_context *)&context,(das_node *)
this
,args);
}
das_interop_function * fn;
};
class
CFunction
:
public
BuiltInFunction
{
public:
__forceinline
CFunction
(
const
char
* name,
const
ModuleLibrary &,
const
char
* cppName, das_interop_function *
FN
)
: BuiltInFunction(name,cppName) {
this
->
callBased
=
true
;
this
->
interopFn
=
true
;
fn =
FN
;
}
virtual
SimNode *
makeSimNode
( Context & context,
const
vector<ExpressionPtr> & )
override
{
const
char
* fnName = context.
code
->
allocateName
(
this
->
name
);
return
context.
code
->
makeNode
<SimNode_CFuncCall>(BuiltInFunction::at,fnName,fn);
}
das_interop_function * fn;
};
struct
CStructureAnnotation
: BasicStructureAnnotation {
uint32_t
sizeOf =
0
;
uint32_t
alignOf =
0
;
CStructureAnnotation
(
const
string & n,
const
string & cpn, ModuleLibrary * l)
: BasicStructureAnnotation(n,cpn,l) {}
virtual
size_t
getSizeOf
()
const
override
{
return
sizeOf; }
virtual
size_t
getAlignOf
()
const
override
{
return
alignOf; }
virtual
bool
isSmart
()
const
override
{
return
false
; }
virtual
bool
hasNonTrivialCtor
()
const
override
{
return
false
; }
virtual
bool
hasNonTrivialDtor
()
const
override
{
return
false
; }
virtual
bool
hasNonTrivialCopy
()
const
override
{
return
false
; }
virtual
bool
isPod
()
const
override
{
return
true
; }
virtual
bool
isRawPod
()
const
override
{
return
false
; }
virtual
bool
canClone
()
const
override
{
return
true
; }
virtual
SimNode *
simulateCopy
( Context & context,
const
LineInfo & at, SimNode * l, SimNode * r )
const
override
{
return
context.
code
->
makeNode
<SimNode_CopyRefValue>(at, l, r, sizeOf);
}
virtual
SimNode *
simulateClone
( Context & context,
const
LineInfo & at, SimNode * l, SimNode * r )
const
override
{
return
context.
code
->
makeNode
<SimNode_CopyRefValue>(at, l, r, sizeOf);
}
};
}
das::FileAccessPtr
get_file_access
(
char
* pak );
//
link time resolved dependencies
Context *
get_context
(
int
stackSize =
0
);
void
das_initialize_modules
() {
NEED_ALL_DEFAULT_MODULES
;
}
extern
"
C
"
{
uint32_t
SIDEEFFECTS_none =
uint32_t
(SideEffects::none);
uint32_t
SIDEEFFECTS_unsafe =
uint32_t
(SideEffects::unsafe);
uint32_t
SIDEEFFECTS_userScenario =
uint32_t
(SideEffects::userScenario);
uint32_t
SIDEEFFECTS_modifyExternal =
uint32_t
(SideEffects::modifyExternal);
uint32_t
SIDEEFFECTS_accessExternal =
uint32_t
(SideEffects::accessExternal);
uint32_t
SIDEEFFECTS_modifyArgument =
uint32_t
(SideEffects::modifyArgument);
uint32_t
SIDEEFFECTS_modifyArgumentAndExternal =
uint32_t
(SideEffects::modifyArgumentAndExternal);
uint32_t
SIDEEFFECTS_worstDefault =
uint32_t
(SideEffects::worstDefault);
uint32_t
SIDEEFFECTS_accessGlobal =
uint32_t
(SideEffects::accessGlobal);
uint32_t
SIDEEFFECTS_invoke =
uint32_t
(SideEffects::invoke);
uint32_t
SIDEEFFECTS_inferredSideEffects =
uint32_t
(SideEffects::inferredSideEffects);
void
das_initialize
() {
das_initialize_modules
();
Module::Initialize
();
}
void
das_shutdown
() {
Module::Shutdown
();
}
das_text_writer *
das_text_make_printer
() {
return
(das_text_writer *)
new
TextPrinter
();
}
das_text_writer *
das_text_make_writer
() {
return
(das_text_writer *)
new
TextWriter
();
}
void
das_text_release
( das_text_writer * output ) {
if
( output )
delete
(TextWriter *) output;
}
void
das_text_output
( das_text_writer * output,
char
* text ) {
*((TextWriter *)output) << text;
}
das_module_group *
das_modulegroup_make
() {
return
(das_module_group *)
new
ModuleGroup
();
}
void
das_modulegroup_release
( das_module_group * group ) {
if
( group )
delete
(ModuleGroup *) group;
}
das_file_access *
das_fileaccess_make_default
( ) {
auto
access =
get_file_access
(
nullptr
);
return
(das_file_access *) access.
orphan
();
}
das_file_access *
das_fileaccess_make_project
(
const
char
* project_file ) {
auto
access =
get_file_access
((
char
*)project_file);
return
(das_file_access *) access.
orphan
();
}
void
das_fileaccess_release
( das_file_access * access ) {
if
( access ) ((FileAccess *) access)->
delRef
();
}
void
das_fileaccess_introduce_file
( das_file_access * access,
const
char
* file_name,
const
char
* file_content ) {
auto
fileInfo = make_unique<TextFileInfo>((
char
*) file_content,
uint32_t
(
strlen
(file_content)),
false
);
((FileAccess *) access)->
setFileInfo
(file_name,
das::move
(fileInfo));
}
void
das_get_root
(
char
* root,
int
maxbuf ) {
auto
r =
getDasRoot
();
strncpy
( root, r.
c_str
(), maxbuf );
}
das_program *
das_program_compile
(
char
* program_file, das_file_access * access, das_text_writer * tout, das_module_group * libgroup ) {
auto
program =
compileDaScript
(program_file,
(FileAccess *) access,
*((TextWriter *) tout),
*((ModuleGroup *) libgroup));
return
(das_program *) program.
orphan
();
}
void
das_program_release
( das_program * program ) {
if
( program ) ((Program *) program)->
delRef
();
}
int
das_program_err_count
( das_program * program ) {
auto
prog = (Program *) program;
return
prog->
failed
() ?
int
(prog->
errors
.
size
()) :
0
;
}
int
das_program_context_stack_size
( das_program * program ) {
return
((Program *)program)->
getContextStackSize
();
}
int
das_program_simulate
( das_program * program, das_context * ctx, das_text_writer * tout ) {
if
( ((Program *) program)->
simulate
(*((Context *)ctx), *((TextWriter *)tout)) ) {
return
1
;
}
else
{
return
0
;
}
}
das_error *
das_program_get_error
( das_program * program,
int
index ) {
auto
prog = (Program *) program;
if
( index<
0
|| index>=
int
(prog->
errors
.
size
()) )
return
nullptr
;
return
(das_error *) &(prog->
errors
[index]);
}
das_context *
das_context_make
(
int
stackSize ) {
return
(das_context *)
get_context
(stackSize);
}
void
das_context_release
( das_context * context ) {
if
( context )
delete
(Context *) context;
}
das_function *
das_context_find_function
( das_context * context,
char
* name ) {
return
(das_function *) ((Context *)context)->
findFunction
(name);
}
vec4f
das_context_eval_with_catch
( das_context * context, das_function * fun, vec4f * arguments ) {
return
((Context *)context)->
evalWithCatch
((SimFunction *)fun,(vec4f *)arguments);
}
char
*
das_context_get_exception
( das_context * context ) {
return
(
char
*) ((Context *)context)->
getException
();
}
void
das_error_output
( das_error * error, das_text_writer * tout ) {
auto
err = (Error *) error;
*((TextWriter *)tout) <<
reportError
(err->
at
, err->
what
, err->
extra
, err->
fixme
, err->
cerr
);
}
void
das_error_report
( das_error * error,
char
* text,
int
maxLength ) {
auto
err = (Error *) error;
auto
str =
reportError
(err->
at
, err->
what
, err->
extra
, err->
fixme
, err->
cerr
);
strncpy
(text, str.
c_str
(), maxLength);
}
das_module *
das_module_create
(
char
* name ) {
return
(das_module *)
new
Module
(name);
}
void
das_module_bind_interop_function
( das_module * mod, das_module_group * lib, das_interop_function * fun,
char
* name,
char
* cppName,
uint32_t
sideffects,
char
* args ) {
auto
fn = make_smart<CFunction>(name, *(ModuleLibrary *)lib, cppName, fun);
fn->
setSideEffects
((das::SideEffects) sideffects);
vector <TypeDeclPtr> arguments;
MangledNameParser parser;
const
char
* arg = args;
while
( *arg ) {
auto
tt = parser.
parseTypeFromMangledName
(arg, *(ModuleLibrary*)lib,(Module *)mod);
arguments.
push_back
(tt);
while
(*arg==
'
'
) arg ++;
}
fn->
constructInterop
(arguments);
((Module *)mod)->
addFunction
(fn,
false
);
}
void
das_module_bind_alias
( das_module * mod, das_module_group * lib,
char
* aname,
char
* tname ) {
MangledNameParser parser;
auto
tt = (
const
char
*) tname;
auto
at = parser.
parseTypeFromMangledName
(tt, *(ModuleLibrary*)lib,(Module *)mod);
DAS_ASSERT
(at->
alias
.
empty
() &&
"
already an alias
"
);
at->
alias
= aname;
((Module *)mod)->
addAlias
(at);
}
void
das_module_bind_structure
( das_module * mod, das_structure * st ) {
((Module *)mod)->
addAnnotation
((Annotation *)st);
}
void
das_module_bind_enumeration
( das_module * mod, das_enumeration * en ) {
((Module *)mod)->
addEnumeration
((Enumeration *)en);
}
das_structure *
das_structure_make
( das_module_group * lib,
const
char
* name,
const
char
* cppname,
int
sz,
int
al ) {
auto
st = make_smart<CStructureAnnotation>(name,cppname,(ModuleLibrary *)lib);
st->
sizeOf
= sz;
st->
alignOf
= al;
return
(das_structure *) st.
orphan
();
}
void
das_structure_add_field
( das_structure * st, das_module * mod, das_module_group * lib,
const
char
* name,
const
char
* cppname,
int
offset,
const
char
* tname ) {
MangledNameParser parser;
auto
tt = (
const
char
*) tname;
auto
at = parser.
parseTypeFromMangledName
(tt, *(ModuleLibrary*)lib,(Module *)mod);
((CStructureAnnotation *)st)->
addFieldEx
(name,cppname,offset,at);
}
das_enumeration *
das_enumeration_make
(
const
char
* name,
const
char
* cppname,
int
ext ) {
auto
pEnum = make_smart<Enumeration>(name);
pEnum->
cppName
= cppname;
pEnum->
external
= ext;
return
(das_enumeration *) pEnum.
orphan
();
}
void
das_enumeration_add_value
( das_enumeration * enu,
const
char
* name,
const
char
* cppName,
int
value ) {
((Enumeration *)enu)->
addIEx
(name, cppName, value,
LineInfo
());
}
int
das_argument_int
( vec4f arg ) {
return
cast<
int
>::
to
(arg); }
float
das_argument_float
( vec4f arg ) {
return
cast<
float
>::
to
(arg); }
double
das_argument_double
( vec4f arg ) {
return
cast<
double
>::
to
(arg); }
char
*
das_argument_string
( vec4f arg ) {
char
* a = cast<
char
*>::
to
(arg);
return
a ? a : ((
char
*)
"
"
); }
void
*
das_argument_ptr
( vec4f arg ) {
return
cast<
void
*>::
to
(arg); }
vec4f
das_result_void
() {
return
v_zero
(); }
vec4f
das_result_int
(
int
r ) {
return
cast<
int
>::
from
(r); }
vec4f
das_result_float
(
float
r ) {
return
cast<
float
>::
from
(r); }
vec4f
das_result_double
(
double
r ) {
return
cast<
double
>::
from
(r); }
vec4f
das_result_string
(
char
* r ) {
return
cast<
char
*>::
from
(r); }
vec4f
das_result_ptr
(
void
* r ) {
return
cast<
void
*>::
from
(r); }
}
Back
|
FazBrowse Home
|
New Git URL