use of priv.bajdcc.LALR1.grammar.runtime.RuntimeObject in project jMiniLang by bajdcc.
the class ModuleNet method parseInternal.
private static RuntimeObject parseInternal(Object o) {
if (o instanceof JSONObject) {
JSONObject obj = (JSONObject) o;
RuntimeMap map = new RuntimeMap();
obj.forEach((key, value) -> {
map.put(key, parseInternal(value));
});
return new RuntimeObject(map);
} else if (o instanceof JSONArray) {
JSONArray obj = (JSONArray) o;
RuntimeArray arr = new RuntimeArray();
obj.forEach((key) -> {
arr.add(parseInternal(key));
});
return new RuntimeObject(arr);
} else {
return new RuntimeObject(o);
}
}
use of priv.bajdcc.LALR1.grammar.runtime.RuntimeObject in project jMiniLang by bajdcc.
the class ModuleProc method buildMethod.
private void buildMethod(IRuntimeDebugInfo info) {
info.addExternalFunc("g_create_process", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "创建进程";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kFunc };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
RuntimeFuncObject func = (RuntimeFuncObject) args.get(0).getObj();
return new RuntimeObject(BigInteger.valueOf(status.createProcess(func)));
}
});
info.addExternalFunc("g_create_process_args", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "创建进程带参数";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kFunc, RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
RuntimeFuncObject func = (RuntimeFuncObject) args.get(0).getObj();
RuntimeObject obj = args.get(1);
return new RuntimeObject(BigInteger.valueOf(status.createProcess(func, obj)));
}
});
info.addExternalFunc("g_create_user_process", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "创建用户态进程";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kFunc };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
RuntimeFuncObject func = (RuntimeFuncObject) args.get(0).getObj();
return new RuntimeObject(BigInteger.valueOf(status.createUsrProcess(func)));
}
});
info.addExternalFunc("g_create_user_process_args", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "创建用户态进程带参数";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kFunc, RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
RuntimeFuncObject func = (RuntimeFuncObject) args.get(0).getObj();
RuntimeObject obj = args.get(1);
return new RuntimeObject(BigInteger.valueOf(status.createUsrProcess(func, obj)));
}
});
info.addExternalFunc("g_get_user_procs", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "获取用户态进程ID列表";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
RuntimeArray arr = new RuntimeArray();
List<Integer> list = status.getUsrProcs();
for (Integer pid : list) {
arr.add(new RuntimeObject(pid));
}
return new RuntimeObject(arr);
}
});
info.addExternalFunc("g_get_pid", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "获取进程ID";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(BigInteger.valueOf(status.getPid()));
}
});
info.addExternalFunc("g_get_parent_pid", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "获取父进程ID";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(BigInteger.valueOf(status.getParentPid()));
}
});
info.addExternalFunc("g_get_process_priority", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "获取进程优先级";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(BigInteger.valueOf(status.getPriority()));
}
});
info.addExternalFunc("g_set_process_priority", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "设置进程优先级";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
BigInteger priority = (BigInteger) args.get(0).getObj();
return new RuntimeObject(status.setPriority(priority.intValue()));
}
});
info.addExternalFunc("g_join_process_once", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "进程等待";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
BigInteger pid = (BigInteger) args.get(0).getObj();
return new RuntimeObject(status.getService().getProcessService().join(pid.intValue(), status.getPid()));
}
});
info.addExternalFunc("g_live_process", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "进程存活";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
BigInteger pid = (BigInteger) args.get(0).getObj();
return new RuntimeObject(status.getService().getProcessService().live(pid.intValue()));
}
});
info.addExternalFunc("g_sleep", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "进程睡眠";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
BigInteger turn = (BigInteger) args.get(0).getObj();
int time = turn.intValue();
return new RuntimeObject(BigInteger.valueOf(status.getService().getProcessService().sleep(status.getPid(), time > 0 ? time : 0)));
}
});
info.addExternalFunc("g_query_usr_proc", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "枚举用户态进程";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(ProcInfoHelper.getProcInfo(status, status.getUsrProcs()));
}
});
info.addExternalFunc("g_query_sys_proc", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "枚举内核态进程";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(ProcInfoHelper.getProcInfo(status, status.getSysProcs()));
}
});
info.addExternalFunc("g_query_all_proc", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "枚举进程";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(ProcInfoHelper.getProcInfoAll(status));
}
});
info.addExternalFunc("g_set_process_desc", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "设置进程说明";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
status.setProcDesc(String.valueOf(args.get(0).getObj()));
return null;
}
});
}
use of priv.bajdcc.LALR1.grammar.runtime.RuntimeObject in project jMiniLang by bajdcc.
the class ModuleString method buildStringUtils.
private void buildStringUtils(IRuntimeDebugInfo info) {
info.addExternalFunc("g_string_replace", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串替换";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kString, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
String pat = (String) args.get(1).getObj();
String sub = (String) args.get(2).getObj();
RuntimeArray arr = new RuntimeArray();
return new RuntimeObject(str.replaceAll(pat, sub));
}
});
info.addExternalFunc("g_string_split", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串分割";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
String split = (String) args.get(1).getObj();
RuntimeArray arr = new RuntimeArray();
for (String item : str.split(split, Integer.MAX_VALUE)) {
arr.add(new RuntimeObject(item));
}
return new RuntimeObject(arr);
}
});
info.addExternalFunc("g_string_splitn", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串分割";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kString, RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
String split = (String) args.get(1).getObj();
int n = (int) args.get(1).getObj();
RuntimeArray arr = new RuntimeArray();
for (String item : str.split(split, n)) {
arr.add(new RuntimeObject(item));
}
return new RuntimeObject(arr);
}
});
info.addExternalFunc("g_string_trim", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串去除头尾空白";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
return new RuntimeObject(str.trim());
}
});
info.addExternalFunc("g_string_length", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串长度";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
return new RuntimeObject(BigInteger.valueOf(str.length()));
}
});
info.addExternalFunc("g_string_empty", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串是否为空";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(args.get(0).getObj().toString().isEmpty());
}
});
info.addExternalFunc("g_string_get", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串查询";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
BigInteger index = (BigInteger) args.get(1).getObj();
return new RuntimeObject(str.charAt(index.intValue()));
}
});
info.addExternalFunc("g_string_regex", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串正则匹配";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
String regex = (String) args.get(1).getObj();
Matcher m = Pattern.compile(regex).matcher(str);
RuntimeArray arr = new RuntimeArray();
while (m.find()) {
arr.add(new RuntimeObject(m.group()));
}
return new RuntimeObject(arr);
}
});
info.addExternalFunc("g_string_build", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "从字节数组构造字符串";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kArray };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
RuntimeArray array = (RuntimeArray) args.get(0).getObj();
StringBuilder sb = new StringBuilder();
for (Object obj : array.toList()) {
sb.append(obj);
}
return new RuntimeObject(sb.toString());
}
});
info.addExternalFunc("g_string_atoi", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串转换成数字";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
try {
BigInteger bi = new BigInteger(str);
return new RuntimeObject(new BigInteger(str));
} catch (NumberFormatException e) {
return new RuntimeObject(BigInteger.valueOf(-1));
}
}
});
info.addExternalFunc("g_string_atoi_s", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串转换成数字(安全版本)";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
try {
BigInteger bi = new BigInteger(str);
return new RuntimeObject(new BigInteger(str));
} catch (NumberFormatException e) {
return null;
}
}
});
info.addExternalFunc("g_string_join_array", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串数组连接";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kArray, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
RuntimeArray arr = (RuntimeArray) args.get(0).getObj();
String delim = (String) args.get(1).getObj();
return new RuntimeObject(String.join(delim, arr.toStringList()));
}
});
info.addExternalFunc("g_string_toupper", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串大写";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String delim = (String) args.get(0).getObj();
return new RuntimeObject(delim.toUpperCase());
}
});
info.addExternalFunc("g_string_tolower", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串小写";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String delim = (String) args.get(0).getObj();
return new RuntimeObject(delim.toLowerCase());
}
});
info.addExternalFunc("g_string_rep", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串重复构造";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
BigInteger dup = (BigInteger) args.get(1).getObj();
int n = dup.intValue();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(str);
}
return new RuntimeObject(sb.toString());
}
});
info.addExternalFunc("g_string_to_number", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串转换数字";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
try {
return new RuntimeObject(new BigInteger(str));
} catch (Exception e1) {
try {
return new RuntimeObject(new BigDecimal(str));
} catch (Exception e2) {
return null;
}
}
}
});
info.addExternalFunc("g_string_equal", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串相等比较";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
if (args.get(0).getType() == RuntimeObjectType.kString) {
String str = (String) args.get(0).getObj();
String cmp = (String) args.get(1).getObj();
return new RuntimeObject(str.compareTo(cmp) == 0);
}
return new RuntimeObject(false);
}
});
info.addExternalFunc("g_string_not_equal", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串不等比较";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
if (args.get(0).getType() == RuntimeObjectType.kString) {
String str = (String) args.get(0).getObj();
String cmp = (String) args.get(1).getObj();
return new RuntimeObject(str.compareTo(cmp) != 0);
}
return new RuntimeObject(true);
}
});
info.addExternalFunc("g_string_start_with", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串开头比较";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
String cmp = (String) args.get(1).getObj();
return new RuntimeObject(str.startsWith(cmp));
}
});
info.addExternalFunc("g_string_end_with", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串结尾比较";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
String cmp = (String) args.get(1).getObj();
return new RuntimeObject(str.endsWith(cmp));
}
});
info.addExternalFunc("g_string_substr", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串子串";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kInt, RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
BigInteger a = (BigInteger) args.get(1).getObj();
BigInteger b = (BigInteger) args.get(2).getObj();
return new RuntimeObject(str.substring(a.intValue(), b.intValue()));
}
});
info.addExternalFunc("g_string_left", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串左子串";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
BigInteger a = (BigInteger) args.get(1).getObj();
return new RuntimeObject(str.substring(0, a.intValue()));
}
});
info.addExternalFunc("g_string_right", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "字符串右子串";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString, RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
String str = (String) args.get(0).getObj();
BigInteger a = (BigInteger) args.get(1).getObj();
return new RuntimeObject(str.substring(a.intValue()));
}
});
}
use of priv.bajdcc.LALR1.grammar.runtime.RuntimeObject in project jMiniLang by bajdcc.
the class ModuleBase method getCodePage.
@Override
public RuntimeCodePage getCodePage() throws Exception {
if (runtimeCodePage != null)
return runtimeCodePage;
String base = ResourceLoader.load(getClass());
Grammar grammar = new Grammar(base);
RuntimeCodePage page = grammar.getCodePage();
IRuntimeDebugInfo info = page.getInfo();
info.addExternalValue("g_null", () -> new RuntimeObject(null));
final BigInteger MINUS_ONE = new BigInteger("-1");
info.addExternalValue("g_minus_1", () -> new RuntimeObject(MINUS_ONE));
info.addExternalValue("g_true", () -> new RuntimeObject(true));
info.addExternalValue("g_false", () -> new RuntimeObject(false));
final String NEWLINE = System.lineSeparator();
info.addExternalValue("g_endl", () -> new RuntimeObject(NEWLINE));
info.addExternalValue("g_nullptr", () -> new RuntimeObject(-1));
info.addExternalFunc("g_is_null", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "判断是否为空";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(args.get(0).getObj() == null);
}
});
info.addExternalFunc("g_is_valid_handle", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "判断句柄合法";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kPtr };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(((int) args.get(0).getObj()) >= 0);
}
});
info.addExternalFunc("g_set_flag", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "设置对象属性";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject, RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
BigInteger flag = (BigInteger) args.get(1).getObj();
args.get(0).setFlag(flag.longValue());
return args.get(0);
}
});
info.addExternalFunc("g_get_flag", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "获取对象属性";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(BigInteger.valueOf(args.get(0).getFlag()));
}
});
info.addExternalFunc("g_is_flag", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "判断对象属性";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject, RuntimeObjectType.kInt };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
BigInteger flag = (BigInteger) args.get(1).getObj();
return new RuntimeObject(args.get(0).getFlag() == flag.longValue());
}
});
info.addExternalFunc("g_set_debug", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "输出调试信息";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kBool };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
boolean debug = (boolean) args.get(0).getObj();
status.getService().getProcessService().setDebug(status.getPid(), debug);
return null;
}
});
info.addExternalFunc("g_not_null", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "判断是否有效";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(args.get(0).getObj() != null);
}
});
info.addExternalFunc("g_print", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "标准输出";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
logger.info(args.get(0).getObj());
return null;
}
});
info.addExternalFunc("g_print_info", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "标准输出";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
logger.info(args.get(0));
return null;
}
});
info.addExternalFunc("g_printn", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "标准输出并换行";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
Object[] info = status.getProcInfo();
logger.info(String.format("#%03d [%s] %s", status.getPid(), info[2], args.get(0).getObj()));
return null;
}
});
info.addExternalFunc("g_printdn", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "调试输出并换行";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
Object[] info = status.getProcInfo();
logger.debug(String.format("#%03d [%s] %s", status.getPid(), info[2], args.get(0).getObj()));
return null;
}
});
info.addExternalFunc("g_print_err", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "错误输出";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
logger.error(args.get(0).getObj());
return null;
}
});
info.addExternalFunc("g_to_string", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "将对象转换成字符串";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) {
RuntimeObject obj = args.get(0);
if (obj == null) {
return new RuntimeObject(null);
}
return new RuntimeObject(String.valueOf(args.get(0).getObj()));
}
});
info.addExternalFunc("g_new", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "深拷贝";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return args.get(0).clone();
}
});
info.addExternalFunc("g_doc", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "文档";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(status.getHelpString(args.get(0).getObj().toString()));
}
});
info.addExternalFunc("g_get_type", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "获取类型";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(args.get(0).getTypeName());
}
});
info.addExternalFunc("g_get_type_ordinal", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "获取类型(索引)";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(BigInteger.valueOf(args.get(0).getTypeIndex()));
}
});
info.addExternalFunc("g_type", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "获取类型";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(args.get(0).getTypeString());
}
});
info.addExternalFunc("g_hash", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "获取哈希";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kObject };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
if (args.get(0).getObj() == null)
return new RuntimeObject("NULL");
return new RuntimeObject(String.valueOf(args.get(0).getObj().hashCode()));
}
});
info.addExternalFunc("g_exit", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "程序退出";
}
@Override
public RuntimeObjectType[] getArgsType() {
return null;
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
throw new RuntimeException(RuntimeError.EXIT, -1, "用户自行退出");
}
});
info.addExternalFunc("g_load", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "载入并运行程序";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(BigInteger.valueOf(status.runProcess(args.get(0).getObj().toString())));
}
});
info.addExternalFunc("g_load_x", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "载入并运行程序";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(BigInteger.valueOf(status.runProcessX(args.get(0).getObj().toString())));
}
});
info.addExternalFunc("g_load_user", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "载入并运行用户态程序";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(BigInteger.valueOf(status.runUsrProcess(args.get(0).getObj().toString())));
}
});
info.addExternalFunc("g_load_user_x", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "载入并运行用户态程序";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
return new RuntimeObject(BigInteger.valueOf(status.runUsrProcessX(args.get(0).getObj().toString())));
}
});
info.addExternalFunc("g_print_file", new IRuntimeDebugExec() {
@Override
public String getDoc() {
return "载入并运行程序";
}
@Override
public RuntimeObjectType[] getArgsType() {
return new RuntimeObjectType[] { RuntimeObjectType.kString };
}
@Override
public RuntimeObject ExternalProcCall(List<RuntimeObject> args, IRuntimeStatus status) throws Exception {
try {
BufferedReader br = new BufferedReader(new FileReader(args.get(0).getObj().toString()));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
} catch (Exception e) {
System.err.println(e.getMessage());
}
return null;
}
});
buildIORead(info);
return runtimeCodePage = page;
}
use of priv.bajdcc.LALR1.grammar.runtime.RuntimeObject in project jMiniLang by bajdcc.
the class RuntimeMachine method opLoadFunc.
@Override
public void opLoadFunc() throws RuntimeException {
int idx = loadInt();
RuntimeFuncObject func = new RuntimeFuncObject(pageName, idx);
RuntimeObject obj = new RuntimeObject(func);
int envSize = loadInt();
FOR_LOOP: for (int i = 0; i < envSize; i++) {
int id = loadInt();
if (id == -1) {
id = loadInt();
String name = fetchFromGlobalData(id).getObj().toString();
IRuntimeDebugValue value = currentPage.getInfo().getValueCallByName(name);
if (value != null) {
func.addEnv(id, value.getRuntimeObject());
continue;
}
int index = currentPage.getInfo().getAddressOfExportFunc(name);
if (index != -1) {
func.addEnv(id, new RuntimeObject(new RuntimeFuncObject(pageName, index)));
continue;
}
List<RuntimeCodePage> refers = pageRefer.get(currentPage.getInfo().getDataMap().get("name").toString());
for (RuntimeCodePage page : refers) {
value = page.getInfo().getValueCallByName(name);
if (value != null) {
func.addEnv(id, value.getRuntimeObject());
continue FOR_LOOP;
}
index = page.getInfo().getAddressOfExportFunc(name);
if (index != -1) {
func.addEnv(id, new RuntimeObject(new RuntimeFuncObject(page.getInfo().getDataMap().get("name").toString(), index)));
continue FOR_LOOP;
}
}
err(RuntimeError.WRONG_LOAD_EXTERN, name);
} else {
func.addEnv(id, stack.findVariable(func.getPage(), id));
}
}
stack.pushData(obj);
}
Aggregations