use obj_newObjInPackge instead of newMateObj directly

This commit is contained in:
lyon1998 2022-03-31 19:35:48 +08:00
parent 94ed084723
commit 6d9afa296e
3 changed files with 26 additions and 12 deletions

View File

@ -336,14 +336,29 @@ PikaObj* removeMethodInfo(PikaObj* thisClass) {
return thisClass;
}
PikaObj* newObjFromFun(NewFun newObjFun) {
PikaObj* thisClass = obj_getClassObjByNewFun(NULL, "", newObjFun);
return removeMethodInfo(thisClass);
}
extern PikaObj* __pikaMain;
PikaObj* newRootObj(char* name, NewFun newObjFun) {
PikaObj* thisClass = obj_getClassObjByNewFun(NULL, name, newObjFun);
PikaObj* newObj = removeMethodInfo(thisClass);
PikaObj* newObj = newObjFromFun(newObjFun);
__pikaMain = newObj;
return newObj;
}
Arg* newFreeObjArg(NewFun newObjFun) {
PikaObj* newObj = newObjFromFun(newObjFun);
Arg* objArg = arg_setPtr(NULL, "", ARG_TYPE_FREE_OBJECT, newObj);
return objArg;
}
Arg* obj_newObjInPackage(NewFun newObjFun) {
return arg_setMetaObj("", "", newObjFun);
// return newFreeObjArg(newObjFun);
}
static PikaObj* __initObj(PikaObj* obj, char* name) {
PikaObj* res = NULL;
NewFun newObjFun = (NewFun)getNewClassObjFunByName(obj, name);

View File

@ -220,9 +220,11 @@ void obj_shellLineProcess(PikaObj* self,
int pikaCompile(char* output_file_name, char* py_lines);
Method obj_getNativeMethod(PikaObj* self, char* method_name);
void obj_runNativeMethod(PikaObj* self, char* method_name, Args* args);
Arg* newFreeObjArg(NewFun newObjFun);
Arg* obj_newObjInPackage(NewFun newObjFun);
#define PIKA_PYTHON_BEGIN
#define PIKA_PYTHON(x)
#define PIKA_PYTHON(x)
#define PIKA_PYTHON_END
#endif

View File

@ -31,12 +31,13 @@ fn main() {
as the top packages.
*/
for package in &version_info.package_list {
if (package.0 == "pikascript-core") {
if package.0 == "pikascript-core" {
continue;
}
compiler = Compiler::analyze_file(compiler, String::from(package.0), true);
}
/* Compile packages in PikaStdLib */
compiler = Compiler::analyze_file(compiler, String::from("PikaStdTask"), true);
compiler = Compiler::analyze_file(compiler, String::from("PikaStdData"), true);
compiler = Compiler::analyze_file(compiler, String::from("PikaDebug"), true);
@ -48,6 +49,7 @@ fn main() {
File::create(format!("{}compiler-info.txt", compiler.dist_path)).unwrap();
let compiler_info = format!("{:?}", compiler);
compiler_info_file.write(compiler_info.as_bytes()).unwrap();
/* make the -api.c file for each python class */
for (_, class_info) in compiler.class_list.iter() {
let api_file_path = format!("{}{}-api.c", compiler.dist_path, class_info.this_class_name);
@ -70,17 +72,12 @@ fn main() {
let name = String::from(class_info.this_class_name.to_string());
f.write(format!("Arg *{}(PikaObj *self){{\n", &name).as_bytes())
.unwrap();
f.write(
format!(
" return arg_setMetaObj(\"\", \"{}\", New_{});\n",
&name, &name
)
.as_bytes(),
)
.unwrap();
f.write(format!(" return obj_newObjInPackage(New_{});\n", &name).as_bytes())
.unwrap();
f.write("}\n".as_bytes()).unwrap();
}
}
/* make the .h file for each python class */
for (_, class_info) in compiler.class_list.iter() {
let api_file_path = format!("{}{}.h", compiler.dist_path, class_info.this_class_name);