pipeline_script/plugin/
builtin.rs1use crate::ast::r#type::Type;
2use crate::core::builtin::{
3 cmd, now, panic, println, read_double, read_float, read_int64, read_line, read_string, sleep,
4 spawn0, string_equal, wait, workspace,
5};
6use crate::core::engine::Engine;
7use crate::llvm::global::Global;
8use crate::llvm::value::fucntion::FunctionValue;
9use crate::llvm::value::LLVMValue;
10use crate::plugin::Plugin;
11use crate::register_external_fn;
12
13pub struct BuiltinPlugin;
14impl Plugin for BuiltinPlugin {
15 fn apply(self, e: &mut Engine) {
16 register_external_fn!(e, "stringEqual", string_equal);
18 register_external_fn!(e, "println", println);
19 register_external_fn!(e, "cmd", cmd);
20 register_external_fn!(e, "workspace0", workspace);
21 register_external_fn!(e, "panic", panic);
22 register_external_fn!(e, "now", now);
23 register_external_fn!(e, "spawnWithString0", spawn0);
24 register_external_fn!(e, "wait", wait);
25 register_external_fn!(e, "sleep", sleep);
26 register_external_fn!(e, "readLine", read_line);
27 register_external_fn!(e, "readString", read_string);
28 register_external_fn!(e, "readInt64", read_int64);
29 register_external_fn!(e, "readDouble", read_double);
30 register_external_fn!(e, "readFloat", read_float);
31 e.register_builtin_symbol_type(
32 "sizeof",
33 Type::Function(Box::new(Type::Int64), vec![], false),
34 );
35 let reference = Global::unit_type().get_undef().as_llvm_value_ref();
36 let sizeof_reference = LLVMValue::Function(FunctionValue::new(
37 reference,
38 "sizeof".into(),
39 Box::new(Global::const_i32(0).into()),
40 vec![],
41 ));
42 e.register_builtin_symbol("sizeof", sizeof_reference);
43 e.register_precluded_scripts(&["extern fn cmd(key: String, cmd: String)
44 extern fn println(obj:..Any)
45 extern fn workspace0(key: String, path: String)
46 extern fn panic(msg: String)
47 extern fn printf(format: String, ...)
48 extern fn now() -> Int64
49 extern fn spawnWithString0(f: Fn(),name:String)
50 extern fn wait()
51 extern fn stringEqual(l:String,r:String)->Bool
52 extern fn sleep(ms: Int64)
53 extern fn readLine() -> String
54 extern fn readString() -> String
55 extern fn readInt64() -> Int64
56 extern fn readFloat() -> Float
57 extern fn readDouble() -> Double
58 "]);
59 }
60}