add new file

update cmsis-pack to v1.10

update v1.10.0 to cmsis-pack

update makepdsc
This commit is contained in:
Lyon 2022-08-08 21:16:39 +08:00
parent a4dcc337bc
commit ee90f9a60f
71 changed files with 4130 additions and 1644 deletions

View File

@ -1,7 +1,4 @@
#api class Debuger:
from PikaObj import *
class Debuger(TinyObj):
def __init__(self): def __init__(self):
pass pass

View File

@ -1,28 +1,32 @@
from PikaObj import * class Tuple:
class List(TinyObj):
def __init__(self): ... def __init__(self): ...
# add an arg after the end of list
def append(self, arg: any): ...
# get an arg by the index # get an arg by the index
def get(self, i: int) -> any: ... def get(self, i: int) -> any: ...
# set an arg by the index
def set(self, i: int, arg: any): ...
# get the length of list # get the length of list
def len(self) -> int: ... def len(self) -> int: ...
# support for loop # support for loop
def __iter__(self) -> any: ... def __iter__(self) -> any: ...
# support for loop # support for loop
def __next__(self) -> any: ... def __next__(self) -> any: ...
# support list[] = val
def __setitem__(self, __key: any, __val: any): ...
# support val = list[] # support val = list[]
def __getitem__(self, __key: any) -> any: ... def __getitem__(self, __key: any) -> any: ...
def __del__(self): ... def __del__(self): ...
def __str__(self) -> str: ...
def __len__(self) -> int: ...
class Dict(TinyObj): class List(Tuple):
def __init__(self): ...
# add an arg after the end of list
def append(self, arg: any): ...
# set an arg by the index
def set(self, i: int, arg: any): ...
# support list[] = val
def __setitem__(self, __key: any, __val: any): ...
def __str__(self) -> str: ...
class Dict:
def __init__(self): ... def __init__(self): ...
# get an arg by the key # get an arg by the key
def get(self, key: str) -> any: ... def get(self, key: str) -> any: ...
@ -37,9 +41,19 @@ class Dict(TinyObj):
# support val = dict[] # support val = dict[]
def __getitem__(self, __key: any) -> any: ... def __getitem__(self, __key: any) -> any: ...
def __del__(self): ... def __del__(self): ...
def __str__(self) -> str: ...
def keys(self) -> dict_keys: ...
def __len__(self) -> int: ...
class String(TinyObj): class dict_keys:
def __iter__(self) -> any: ...
def __next__(self) -> any: ...
def __str__(self) -> str: ...
def __len__(self) -> int: ...
class String:
def __init__(self, s: str): ... def __init__(self, s: str): ...
def set(self, s: str): ... def set(self, s: str): ...
def get(self) -> str: ... def get(self) -> str: ...
@ -51,6 +65,8 @@ class String(TinyObj):
def __getitem__(self, __key: any) -> any: ... def __getitem__(self, __key: any) -> any: ...
# support str() # support str()
def __str__(self) -> str: ... def __str__(self) -> str: ...
def __len__(self) -> int: ...
def encode(self) -> bytes: ...
def startwith(self, prefix: str) -> int: ... def startwith(self, prefix: str) -> int: ...
def endwith(self, suffix: str) -> int: ... def endwith(self, suffix: str) -> int: ...
@ -59,13 +75,37 @@ class String(TinyObj):
def isalnum(self) -> int: ... def isalnum(self) -> int: ...
def isalpha(self) -> int: ... def isalpha(self) -> int: ...
def isspace(self) -> int: ... def isspace(self) -> int: ...
def split(self, s: str) -> List: ...
def replace(self, old: str, new: str) -> str: ...
def strip(self) -> str: ...
class ByteArray(List): class ByteArray:
# convert a string to ByteArray # convert a string to ByteArray
def fromString(self, s: str): ... def __init__(self, bytes: any): ...
# support for loop
def __iter__(self) -> any: ...
# support for loop
def __next__(self) -> any: ...
# support [] index
def __getitem__(self, __key: int) -> int: ...
def __setitem__(self, __key: int, __val: int): ...
def __str__(self) -> str: ...
def decode(self) -> str: ...
class Utils(TinyObj): class FILEIO:
def init(self, path: str, mode: str): ...
def read(self, size: int) -> any: ...
def write(self, s: any) -> int: ...
def close(self): ...
def seek(self, offset: int, *fromwhere) -> int: ...
def tell(self) -> int: ...
def readline(self) -> str: ...
def readlines(self) -> List: ...
def writelines(self, lines: List): ...
class Utils:
# convert a int to bytes # convert a int to bytes
def int_to_bytes(self, val: int) -> bytes: ... def int_to_bytes(self, val: int) -> bytes: ...

View File

@ -1,7 +1,4 @@
from PikaObj import * class MemChecker:
class MemChecker(TinyObj):
def max(self): ... def max(self): ...
def now(self): ... def now(self): ...
def getMax(self) -> float: ... def getMax(self) -> float: ...
@ -9,37 +6,60 @@ class MemChecker(TinyObj):
def resetMax(self): ... def resetMax(self): ...
class SysObj(BaseObj): class SysObj:
def type(self, arg: any): ... @staticmethod
def remove(self, argPath: str): ... def type(arg: any) -> any: ...
def int(self, arg: any) -> int: ... @staticmethod
def float(self, arg: any) -> float: ... def remove(argPath: str): ...
def str(self, arg: any) -> str: ... @staticmethod
def iter(self, arg: any) -> any: ... def int(arg: any) -> int: ...
def range(self, a1: int, a2: int) -> any: ... @staticmethod
def print(self, *val): ... def float(arg: any) -> float: ...
def printNoEnd(self, val: any): ... @staticmethod
def __setitem__(self, obj: any, key: any, val: any, obj_str: str): ... def str(arg: any) -> str: ...
def __getitem__(self, obj: any, key: any) -> any: ... @staticmethod
def __slice__(self, obj: any, start: any, end: any, step: int) -> any: ... def iter(arg: any) -> any: ...
def len(self, arg: any) -> int: ... @staticmethod
def list(self) -> any: ... def range(a1: int, a2: int) -> any: ...
def dict(self) -> any: ... @staticmethod
def hex(self, val: int) -> str: ... def print(*val): ...
def ord(self, val: str) -> int: ... @staticmethod
def chr(self, val: int) -> str: ... def printNoEnd(val: any): ...
def bytes(self, val: any) -> bytes: ... @staticmethod
def cformat(self, fmt: str, *var) -> str: ... def __setitem__(obj: any, key: any, val: any) -> any: ...
def id(self, obj: any) -> int: ... @staticmethod
def __getitem__(obj: any, key: any) -> any: ...
@staticmethod
def __slice__(obj: any, start: any, end: any, step: int) -> any: ...
@staticmethod
def len(arg: any) -> int: ...
@staticmethod
def list() -> any: ...
@staticmethod
def dict() -> any: ...
@staticmethod
def hex(val: int) -> str: ...
@staticmethod
def ord(val: str) -> int: ...
@staticmethod
def chr(val: int) -> str: ...
@staticmethod
def bytes(val: any) -> bytes: ...
@staticmethod
def cformat(fmt: str, *var) -> str: ...
@staticmethod
def id(obj: any) -> int: ...
@staticmethod
def open(path: str, mode: str) -> object: ...
class RangeObj(TinyObj): class RangeObj:
def __next__(self) -> any: ... def __next__(self) -> any: ...
class StringObj(TinyObj): class StringObj:
def __next__(self) -> any: ... def __next__(self) -> any: ...
class PikaObj(TinyObj): class PikaObj:
... ...

View File

@ -1,9 +1,8 @@
#api
from PikaObj import *
import PikaStdData import PikaStdData
import PikaStdLib
class Task(TinyObj): class Task(PikaStdLib.SysObj):
calls = PikaStdData.List() calls = PikaStdData.List()
def __init__(self): def __init__(self):

View File

@ -12,14 +12,14 @@
<license> <license>
</license> </license>
--> -->
<repository type="git">https://github.com/pikasTech/pikascript.git</repository> <repository type="git">https://github.com/pikasTech/pikascript.git</repository>
<releases> <releases>
<release date="2022-06-24" version="0.9.2" url="https://gitee.com/Lyon1998/pikascript/attach_files/1106948/download"> <release date="2022-08-8" version="1.10.0" url="https://gitee.com/Lyon1998/pikascript/attach_files/1106948/download">
- PikaScript v1.8.7 - PikaScript v1.10.0
</release> </release>
</releases> </releases>
<keywords> <keywords>
@ -27,84 +27,84 @@
<keyword>Python</keyword> <keyword>Python</keyword>
<keyword>MCU</keyword> <keyword>MCU</keyword>
</keywords> </keywords>
<conditions> <conditions>
<condition id="Arm Compiler"> <condition id="Arm Compiler">
<description>Arm Compiler 5 (armcc) or Arm Compiler 6 (armclang).</description> <description>Arm Compiler 5 (armcc) or Arm Compiler 6 (armclang).</description>
<accept Tcompiler="ARMCC" Toptions="AC6"/> <accept Tcompiler="ARMCC" Toptions="AC6" />
<accept Tcompiler="ARMCC" Toptions="AC6LTO"/> <accept Tcompiler="ARMCC" Toptions="AC6LTO" />
<accept Tcompiler="ARMCC" Toptions="AC5"/> <accept Tcompiler="ARMCC" Toptions="AC5" />
</condition> </condition>
<condition id="Arm GCC"> <condition id="Arm GCC">
<description>GNU Tools for Arm Embedded Processors.</description> <description>GNU Tools for Arm Embedded Processors.</description>
<accept Tcompiler="GCC"/> <accept Tcompiler="GCC" />
</condition> </condition>
<condition id="Cortex-M Processors"> <condition id="Cortex-M Processors">
<description>Support All Cortex-M based processors</description> <description>Support All Cortex-M based processors</description>
<accept Dcore="Cortex-M0"/> <accept Dcore="Cortex-M0" />
<accept Dcore="Cortex-M0+"/> <accept Dcore="Cortex-M0+" />
<accept Dcore="Cortex-M1"/> <accept Dcore="Cortex-M1" />
<accept Dcore="Cortex-M3"/> <accept Dcore="Cortex-M3" />
<accept Dcore="Cortex-M4"/> <accept Dcore="Cortex-M4" />
<accept Dcore="Cortex-M7"/> <accept Dcore="Cortex-M7" />
<accept Dcore="Cortex-M23"/> <accept Dcore="Cortex-M23" />
<accept Dcore="Cortex-M33"/> <accept Dcore="Cortex-M33" />
<accept Dcore="Cortex-M35P"/> <accept Dcore="Cortex-M35P" />
<accept Dcore="Cortex-M55"/> <accept Dcore="Cortex-M55" />
<accept Dcore="Cortex-M85"/> <accept Dcore="Cortex-M85" />
<accept Dcore="Star-MC1"/> <accept Dcore="Star-MC1" />
<accept Dcore="SC000"/> <accept Dcore="SC000" />
<accept Dcore="SC300"/> <accept Dcore="SC300" />
<accept Dcore="ARMV8MBL"/> <accept Dcore="ARMV8MBL" />
<accept Dcore="ARMV8MML"/> <accept Dcore="ARMV8MML" />
<accept Dcore="ARMV81MML"/> <accept Dcore="ARMV81MML" />
</condition> </condition>
<condition id="CMSIS-CORE"> <condition id="CMSIS-CORE">
<description>Require CMSIS-CORE Support</description> <description>Require CMSIS-CORE Support</description>
<require Cclass="CMSIS" Cgroup="CORE"/> <require Cclass="CMSIS" Cgroup="CORE" />
</condition> </condition>
<condition id="Cortex-M Arm GCC"> <condition id="Cortex-M Arm GCC">
<description>Compile Cortex-M Processors with GNU Tools for Arm Embedded Processors.</description> <description>Compile Cortex-M Processors with GNU Tools for Arm Embedded Processors.</description>
<require condition="Arm GCC"/> <require condition="Arm GCC" />
<require condition="Cortex-M Processors"/> <require condition="Cortex-M Processors" />
</condition> </condition>
<condition id="Cortex-M Arm Compiler"> <condition id="Cortex-M Arm Compiler">
<description>Compile Cortex-M Processors with GNU Tools for Arm Embedded Processors.</description> <description>Compile Cortex-M Processors with GNU Tools for Arm Embedded Processors.</description>
<require condition="Arm Compiler"/> <require condition="Arm Compiler" />
<require condition="Cortex-M Processors"/> <require condition="Cortex-M Processors" />
</condition> </condition>
<condition id="Cortex-M Arm GCC CMSIS-CORE"> <condition id="Cortex-M Arm GCC CMSIS-CORE">
<description>Compile Cortex-M Processors with GNU Tools for Arm Embedded Processors.</description> <description>Compile Cortex-M Processors with GNU Tools for Arm Embedded Processors.</description>
<require condition="Arm GCC"/> <require condition="Arm GCC" />
<require condition="Cortex-M Processors"/> <require condition="Cortex-M Processors" />
<require condition="CMSIS-CORE"/> <require condition="CMSIS-CORE" />
</condition> </condition>
<condition id="Cortex-M Arm Compiler CMSIS-CORE"> <condition id="Cortex-M Arm Compiler CMSIS-CORE">
<description>Compile Cortex-M Processors with GNU Tools for Arm Embedded Processors.</description> <description>Compile Cortex-M Processors with GNU Tools for Arm Embedded Processors.</description>
<require condition="Arm Compiler"/> <require condition="Arm Compiler" />
<require condition="Cortex-M Processors"/> <require condition="Cortex-M Processors" />
<require condition="CMSIS-CORE"/> <require condition="CMSIS-CORE" />
</condition> </condition>
<condition id="Kernel"> <condition id="Kernel">
<description>The Kernel of the PikaScript</description> <description>The Kernel of the PikaScript</description>
<require Cclass="PikaScript" Cgroup="PikaScript" Csub="Core" Cversion="1.8.6"/> <require Cclass="PikaScript" Cgroup="PikaScript" Csub="Core" Cversion="1.8.6" />
</condition> </condition>
<condition id="PLOOC_Pack"> <condition id="PLOOC_Pack">
<description>The Kernel of the PikaScript</description> <description>The Kernel of the PikaScript</description>
<require Cclass="Language Extension" Cgroup="PLOOC"/> <require Cclass="Language Extension" Cgroup="PLOOC" />
</condition> </condition>
<condition id="NO_PLOOC_Pack"> <condition id="NO_PLOOC_Pack">
<description>The Kernel of the PikaScript</description> <description>The Kernel of the PikaScript</description>
<deny Cclass="Language Extension" Cgroup="PLOOC" /> <deny Cclass="Language Extension" Cgroup="PLOOC" />
</condition> </condition>
</conditions> </conditions>
<!-- apis section (optional - for Application Programming Interface descriptions) --> <!-- apis section (optional - for Application Programming Interface descriptions) -->
<!-- <!--
<apis> <apis>
@ -128,147 +128,156 @@
<examples> <examples>
</examples> </examples>
--> -->
<!-- conditions section (optional for all Software Packs)--> <!-- conditions section (optional for all Software Packs)-->
<!-- <!--
<conditions> <conditions>
</conditions> </conditions>
--> -->
<components> <components>
<bundle Cbundle="PikaScript" Cclass="PikaScript" Cversion="1.8.7"> <bundle Cbundle="PikaScript" Cclass="PikaScript" Cversion="1.8.7">
<description>an ultra-lightweight Python engine</description> <description>an ultra-lightweight Python engine</description>
<doc>https://pikadoc.readthedocs.io/en/latest/index.html</doc> <doc>https://pikadoc.readthedocs.io/en/latest/index.html</doc>
<component Cgroup="PikaScript" Csub="Core" Cversion="1.8.7"> <component Cgroup="PikaScript" Csub="Core" Cversion="1.8.7">
<description>PikaScript Kernel</description> <description>PikaScript Kernel</description>
<files> <files>
<file attr="config" category="header" name="pikascript-core/BaseObj.h" /> <!-- kernal begin -->
<file attr="config" category="sourceC" name="pikascript-core/BaseObj.c" /> <file attr="config" category="sourceC" name="pikascript-core/BaseObj.c" />
<file attr="config" category="header" name="pikascript-core/dataArg.h" /> <file attr="config" category="sourceC" name="pikascript-core/dataArg.c" />
<file attr="config" category="sourceC" name="pikascript-core/dataArg.c" /> <file attr="config" category="sourceC" name="pikascript-core/dataArgs.c" />
<file attr="config" category="header" name="pikascript-core/dataArgs.h" /> <file attr="config" category="sourceC" name="pikascript-core/dataLink.c" />
<file attr="config" category="sourceC" name="pikascript-core/dataArgs.c" /> <file attr="config" category="sourceC" name="pikascript-core/dataLinkNode.c" />
<file attr="config" category="header" name="pikascript-core/dataLink.h" /> <file attr="config" category="sourceC" name="pikascript-core/dataMemory.c" />
<file attr="config" category="sourceC" name="pikascript-core/dataLink.c" /> <file attr="config" category="sourceC" name="pikascript-core/dataQueue.c" />
<file attr="config" category="header" name="pikascript-core/dataLinkNode.h" /> <file attr="config" category="sourceC" name="pikascript-core/dataQueueObj.c" />
<file attr="config" category="sourceC" name="pikascript-core/dataLinkNode.c" /> <file attr="config" category="sourceC" name="pikascript-core/dataStack.c" />
<file attr="config" category="header" name="pikascript-core/dataMemory.h" /> <file attr="config" category="sourceC" name="pikascript-core/dataString.c" />
<file attr="config" category="sourceC" name="pikascript-core/dataMemory.c" /> <file attr="config" category="sourceC" name="pikascript-core/dataStrs.c" />
<file attr="config" category="header" name="pikascript-core/dataQueue.h" /> <file attr="config" category="sourceC" name="pikascript-core/PikaCompiler.c" />
<file attr="config" category="sourceC" name="pikascript-core/dataQueue.c" /> <file attr="config" category="sourceC" name="pikascript-core/PikaObj.c" />
<file attr="config" category="header" name="pikascript-core/dataQueueObj.h" /> <file attr="config" category="sourceC" name="pikascript-core/PikaParser.c" />
<file attr="config" category="sourceC" name="pikascript-core/dataQueueObj.c" /> <file attr="config" category="sourceC" name="pikascript-core/PikaPlatform.c" />
<file attr="config" category="header" name="pikascript-core/dataStack.h" /> <file attr="config" category="sourceC" name="pikascript-core/PikaVM.c" />
<file attr="config" category="sourceC" name="pikascript-core/dataStack.c" /> <file attr="config" category="sourceC" name="pikascript-core/TinyObj.c" />
<file attr="config" category="header" name="pikascript-core/dataString.h" /> <file attr="config" category="header" name="pikascript-core/BaseObj.h" />
<file attr="config" category="sourceC" name="pikascript-core/dataString.c" /> <file attr="config" category="header" name="pikascript-core/dataArg.h" />
<file attr="config" category="header" name="pikascript-core/dataStrs.h" /> <file attr="config" category="header" name="pikascript-core/dataArgs.h" />
<file attr="config" category="sourceC" name="pikascript-core/dataStrs.c" /> <file attr="config" category="header" name="pikascript-core/dataLink.h" />
<file attr="config" category="header" name="pikascript-core/PikaCompiler.h" /> <file attr="config" category="header" name="pikascript-core/dataLinkNode.h" />
<file attr="config" category="sourceC" name="pikascript-core/PikaCompiler.c" /> <file attr="config" category="header" name="pikascript-core/dataMemory.h" />
<file attr="config" category="header" name="pikascript-core/PikaObj.h" /> <file attr="config" category="header" name="pikascript-core/dataQueue.h" />
<file attr="config" category="sourceC" name="pikascript-core/PikaObj.c" /> <file attr="config" category="header" name="pikascript-core/dataQueueObj.h" />
<file attr="config" category="header" name="pikascript-core/PikaParser.h" /> <file attr="config" category="header" name="pikascript-core/dataStack.h" />
<file attr="config" category="sourceC" name="pikascript-core/PikaParser.c" /> <file attr="config" category="header" name="pikascript-core/dataString.h" />
<file attr="config" category="header" name="pikascript-core/PikaPlatform.h" /> <file attr="config" category="header" name="pikascript-core/dataStrs.h" />
<file attr="config" category="sourceC" name="pikascript-core/PikaPlatform.c" /> <file attr="config" category="header" name="pikascript-core/PikaCompiler.h" />
<file attr="config" category="header" name="pikascript-core/PikaVM.h" /> <file attr="config" category="header" name="pikascript-core/PikaObj.h" />
<file attr="config" category="sourceC" name="pikascript-core/PikaVM.c" /> <file attr="config" category="header" name="pikascript-core/PikaParser.h" />
<file attr="config" category="header" name="pikascript-core/TinyObj.h" /> <file attr="config" category="header" name="pikascript-core/PikaPlatform.h" />
<file attr="config" category="sourceC" name="pikascript-core/TinyObj.c" /> <file attr="config" category="header" name="pikascript-core/PikaVersion.h" />
<file attr="config" category="header" name="pikascript-core/pika_config_valid.h" /> <file attr="config" category="header" name="pikascript-core/PikaVM.h" />
<file attr="config" category="header" name="pikascript-core/pika_config_valid.h" />
<!-- Misc --> <file attr="config" category="header" name="pikascript-core/TinyObj.h" />
<file attr="config" category="header" name="pikascript-core/__instruction_def.h" /> <file attr="config" category="header" name="pikascript-core/__instruction_def.h" />
<file attr="config" category="source" name="pikascript-core/__instruction_table.cfg" /> <file attr="config" category="header" name="pikascript-core/__pika_ooc.h" />
<file attr="config" category="source" name="pikascript-core/__instruction_table.cfg" />
<file attr="config" category="header" name="__pika_ooc.h" /> <!-- kernal end -->
<file category="header" name="PLOOC/plooc_class.h" condition="NO_PLOOC_Pack" />
<file category="header" name="PLOOC/plooc.h" condition="NO_PLOOC_Pack" /> <file attr="config" category="header" name="__pika_ooc.h" />
<file category="header" name="PLOOC/plooc_class_simple.h" condition="NO_PLOOC_Pack" /> <file category="header" name="PLOOC/plooc_class.h" condition="NO_PLOOC_Pack" />
<file category="header" name="PLOOC/plooc_class_simple_c90.h" condition="NO_PLOOC_Pack" /> <file category="header" name="PLOOC/plooc.h" condition="NO_PLOOC_Pack" />
<file category="header" name="PLOOC/plooc_class_strict.h" condition="NO_PLOOC_Pack" /> <file category="header" name="PLOOC/plooc_class_simple.h" condition="NO_PLOOC_Pack" />
<file category="header" name="PLOOC/plooc_class_black_box.h" condition="NO_PLOOC_Pack" /> <file category="header" name="PLOOC/plooc_class_simple_c90.h" condition="NO_PLOOC_Pack" />
<file category="header" name="PLOOC/plooc_class_strict.h" condition="NO_PLOOC_Pack" />
<file attr="config" category="utility" name="rust-msc-latest-win10.exe" version="1.0.0"/> <file category="header" name="PLOOC/plooc_class_black_box.h" condition="NO_PLOOC_Pack" />
<file attr="config" category="utility" name="pikaPackage.exe" version="1.0.0"/>
<file attr="config" category="utility" name="pikaBeforBuild-keil.bat" version="1.0.2"/> <file attr="config" category="utility" name="rust-msc-latest-win10.exe" version="1.0.0" />
<file attr="config" category="source" name="requestment.txt" version="1.0.1"/> <file attr="config" category="utility" name="pikaPackage.exe" version="1.0.0" />
<file attr="config" category="source" name="main.py" /> <file attr="config" category="utility" name="pikaBeforBuild-keil.bat" version="1.0.2" />
<file attr="config" category="source" name="requestment.txt" version="1.0.1" />
</files> <file attr="config" category="source" name="main.py" />
<RTE_Components_h>
</files>
<RTE_Components_h>
#define RTE_Script_PikaScript #define RTE_Script_PikaScript
</RTE_Components_h> </RTE_Components_h>
</component> </component>
<component Cgroup="PikaScript" Csub="PikaStdLib" Cversion="1.8.7" condition="Kernel"> <component Cgroup="PikaScript" Csub="PikaStdLib" Cversion="1.8.7" condition="Kernel">
<description>The standard library for PikaScript</description> <description>The standard library for PikaScript</description>
<files> <files>
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaDebuger_Debuger.c" /> <!-- lib begin -->
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_Dict.c" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaDebuger_Debuger.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_List.c" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_ByteArray.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_String.c" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_Dict.c" />
<file attr="config" category="header" name="pikascript-lib/PikaStdLib/PikaStdData_String_Util.h" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_FILEIO.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_Utils.c" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_List.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdLib_MemChecker.c" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_String.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdLib_RangeObj.c" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_Tuple.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdLib_StringObj.c" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_Utils.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdLib_MemChecker.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdTask_Task.c" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdLib_RangeObj.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdLib_StringObj.c" />
<!-- placeholder for pikascript-api --> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c" />
<file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdTask_Task.c" />
<file attr="config" category="header" name="pikascript-api/PikaDebug.h" /> <file attr="config" category="sourceC" name="pikascript-lib/PikaStdLib/PikaStdData_String_Util.h" />
<file attr="config" category="header" name="pikascript-api/PikaDebug_Debuger.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaDebug-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaMain.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaDebug_Debuger-api.c" />
<file attr="config" category="header" name="pikascript-api/pikaScript.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaMain-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdData.h" /> <file attr="config" category="sourceC" name="pikascript-api/pikaScript.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdData_ByteArray.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdData_Dict.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_ByteArray-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdData_List.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_Dict-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdData_String.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_dict_keys-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdData_Utils.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_FILEIO-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdLib.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_List-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdLib_MemChecker.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_String-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdLib_PikaObj.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_Tuple-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdLib_RangeObj.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_Utils-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdLib_StringObj.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdLib-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdLib_SysObj.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_MemChecker-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdTask.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_PikaObj-api.c" />
<file attr="config" category="header" name="pikascript-api/PikaStdTask_Task.h" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_RangeObj-api.c" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_StringObj-api.c" />
<file attr="config" category="sourceC" name="pikascript-api/__asset_pikaModules_py_a.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_SysObj-api.c" />
<file attr="config" category="sourceC" name="pikascript-api/PikaDebug_Debuger-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdTask-api.c" />
<file attr="config" category="sourceC" name="pikascript-api/PikaDebug-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdTask_Task-api.c" />
<file attr="config" category="sourceC" name="pikascript-api/PikaMain-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/__asset_pikaModules_py_a.c" />
<file attr="config" category="sourceC" name="pikascript-api/pikaScript.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaDebug.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdData_ByteArray-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaDebug_Debuger.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdData_Dict-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaMain.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdData_List-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/pikaScript.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdData_String-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdData_Utils-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_ByteArray.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdData-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_Dict.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_MemChecker-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_dict_keys.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_PikaObj-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_FILEIO.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_RangeObj-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_List.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_StringObj-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_String.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_SysObj-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_Tuple.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdLib-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdData_Utils.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdTask_Task-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdLib.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdTask-api.c" /> <file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_MemChecker.h" />
</files> <file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_PikaObj.h" />
</component> <file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_RangeObj.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_StringObj.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdLib_SysObj.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdTask.h" />
<file attr="config" category="sourceC" name="pikascript-api/PikaStdTask_Task.h" />
<!-- lib end -->
</files>
</component>
</bundle>
</components>
</bundle>
</components>
<!-- optional taxonomy section for defining new component Class and Group names --> <!-- optional taxonomy section for defining new component Class and Group names -->
<!-- <!--
<taxonomy> <taxonomy>
</taxonomy> </taxonomy>
--> -->
</package> </package>

View File

@ -0,0 +1,56 @@
import os
from xmlrpc.server import list_public_methods
class Group:
path: str
files: list
subfix = ".c"
name: str
def __init__(self, name: str, path: str, subfix: str, format='<file attr="config" category="sourceC" name="%s" />'):
self.path = path
self.files = []
self.subfix = subfix
self.format = format
self.name = name
self.update()
def setformat(self, format: str):
self.format = format
def update(self):
files = os.listdir(self.path)
self.files = [file for file in files if file.endswith(self.subfix)]
def __str__(self):
res = ""
for file in self.files:
res += self.format % (self.path + '/' + file) + '\n'
return res
def write(self):
with open(self.name + ".xml", 'w') as f:
f.write(str(self))
def collect(name, groupList: list[Group]):
with open(name + ".xml", 'w') as f:
for group in groupList:
print(group)
f.write(str(group))
kernal_c = Group("kernalH", "pikascript-core", ".c")
kernal_h = Group("kernalC", "pikascript-core", ".h",
format='<file attr="config" category="header" name="%s" />')
kernal_cfg = Group("kernalCfg", "pikascript-core", ".cfg",
format='<file attr="config" category="source" name="%s" />')
lib_c = Group("libC", "pikascript-lib/PikaStdLib", ".c")
lib_h = Group("libH", "pikascript-lib/PikaStdLib", ".h")
api_c = Group("apiC", "pikascript-api", ".c")
api_h = Group("apiH", "pikascript-api", ".h")
collect("kernal", [kernal_c, kernal_h, kernal_cfg])
collect("lib", [lib_c, lib_h, api_c, api_h])

View File

@ -17,6 +17,11 @@ void PikaStdData_DictMethod(PikaObj *self, Args *args){
method_returnArg(args, res); method_returnArg(args, res);
} }
void PikaStdData_FILEIOMethod(PikaObj *self, Args *args){
Arg* res = PikaStdData_FILEIO(self);
method_returnArg(args, res);
}
void PikaStdData_ListMethod(PikaObj *self, Args *args){ void PikaStdData_ListMethod(PikaObj *self, Args *args){
Arg* res = PikaStdData_List(self); Arg* res = PikaStdData_List(self);
method_returnArg(args, res); method_returnArg(args, res);
@ -27,18 +32,31 @@ void PikaStdData_StringMethod(PikaObj *self, Args *args){
method_returnArg(args, res); method_returnArg(args, res);
} }
void PikaStdData_TupleMethod(PikaObj *self, Args *args){
Arg* res = PikaStdData_Tuple(self);
method_returnArg(args, res);
}
void PikaStdData_UtilsMethod(PikaObj *self, Args *args){ void PikaStdData_UtilsMethod(PikaObj *self, Args *args){
Arg* res = PikaStdData_Utils(self); Arg* res = PikaStdData_Utils(self);
method_returnArg(args, res); method_returnArg(args, res);
} }
void PikaStdData_dict_keysMethod(PikaObj *self, Args *args){
Arg* res = PikaStdData_dict_keys(self);
method_returnArg(args, res);
}
PikaObj *New_PikaStdData(Args *args){ PikaObj *New_PikaStdData(Args *args){
PikaObj *self = New_TinyObj(args); PikaObj *self = New_TinyObj(args);
class_defineConstructor(self, "ByteArray()->any", PikaStdData_ByteArrayMethod); class_defineConstructor(self, "ByteArray()->any", PikaStdData_ByteArrayMethod);
class_defineConstructor(self, "Dict()->any", PikaStdData_DictMethod); class_defineConstructor(self, "Dict()->any", PikaStdData_DictMethod);
class_defineConstructor(self, "FILEIO()->any", PikaStdData_FILEIOMethod);
class_defineConstructor(self, "List()->any", PikaStdData_ListMethod); class_defineConstructor(self, "List()->any", PikaStdData_ListMethod);
class_defineConstructor(self, "String()->any", PikaStdData_StringMethod); class_defineConstructor(self, "String()->any", PikaStdData_StringMethod);
class_defineConstructor(self, "Tuple()->any", PikaStdData_TupleMethod);
class_defineConstructor(self, "Utils()->any", PikaStdData_UtilsMethod); class_defineConstructor(self, "Utils()->any", PikaStdData_UtilsMethod);
class_defineConstructor(self, "dict_keys()->any", PikaStdData_dict_keysMethod);
return self; return self;
} }

View File

@ -11,8 +11,11 @@ PikaObj *New_PikaStdData(Args *args);
Arg* PikaStdData_ByteArray(PikaObj *self); Arg* PikaStdData_ByteArray(PikaObj *self);
Arg* PikaStdData_Dict(PikaObj *self); Arg* PikaStdData_Dict(PikaObj *self);
Arg* PikaStdData_FILEIO(PikaObj *self);
Arg* PikaStdData_List(PikaObj *self); Arg* PikaStdData_List(PikaObj *self);
Arg* PikaStdData_String(PikaObj *self); Arg* PikaStdData_String(PikaObj *self);
Arg* PikaStdData_Tuple(PikaObj *self);
Arg* PikaStdData_Utils(PikaObj *self); Arg* PikaStdData_Utils(PikaObj *self);
Arg* PikaStdData_dict_keys(PikaObj *self);
#endif #endif

View File

@ -2,19 +2,57 @@
/* Warning! Don't modify this file! */ /* Warning! Don't modify this file! */
/* ******************************** */ /* ******************************** */
#include "PikaStdData_ByteArray.h" #include "PikaStdData_ByteArray.h"
#include "PikaStdData_List.h" #include "TinyObj.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "BaseObj.h" #include "BaseObj.h"
void PikaStdData_ByteArray_fromStringMethod(PikaObj *self, Args *args){ void PikaStdData_ByteArray___getitem__Method(PikaObj *self, Args *args){
char* s = args_getStr(args, "s"); int __key = args_getInt(args, "__key");
PikaStdData_ByteArray_fromString(self, s); int res = PikaStdData_ByteArray___getitem__(self, __key);
method_returnInt(args, res);
}
void PikaStdData_ByteArray___init__Method(PikaObj *self, Args *args){
Arg* bytes = args_getArg(args, "bytes");
PikaStdData_ByteArray___init__(self, bytes);
}
void PikaStdData_ByteArray___iter__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_ByteArray___iter__(self);
method_returnArg(args, res);
}
void PikaStdData_ByteArray___next__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_ByteArray___next__(self);
method_returnArg(args, res);
}
void PikaStdData_ByteArray___setitem__Method(PikaObj *self, Args *args){
int __key = args_getInt(args, "__key");
int __val = args_getInt(args, "__val");
PikaStdData_ByteArray___setitem__(self, __key, __val);
}
void PikaStdData_ByteArray___str__Method(PikaObj *self, Args *args){
char* res = PikaStdData_ByteArray___str__(self);
method_returnStr(args, res);
}
void PikaStdData_ByteArray_decodeMethod(PikaObj *self, Args *args){
char* res = PikaStdData_ByteArray_decode(self);
method_returnStr(args, res);
} }
PikaObj *New_PikaStdData_ByteArray(Args *args){ PikaObj *New_PikaStdData_ByteArray(Args *args){
PikaObj *self = New_PikaStdData_List(args); PikaObj *self = New_TinyObj(args);
class_defineMethod(self, "fromString(s:str)", PikaStdData_ByteArray_fromStringMethod); class_defineMethod(self, "__getitem__(__key:int)->int", PikaStdData_ByteArray___getitem__Method);
class_defineMethod(self, "__init__(bytes:any)", PikaStdData_ByteArray___init__Method);
class_defineMethod(self, "__iter__()->any", PikaStdData_ByteArray___iter__Method);
class_defineMethod(self, "__next__()->any", PikaStdData_ByteArray___next__Method);
class_defineMethod(self, "__setitem__(__key:int,__val:int)", PikaStdData_ByteArray___setitem__Method);
class_defineMethod(self, "__str__()->str", PikaStdData_ByteArray___str__Method);
class_defineMethod(self, "decode()->str", PikaStdData_ByteArray_decodeMethod);
return self; return self;
} }

View File

@ -9,6 +9,12 @@
PikaObj *New_PikaStdData_ByteArray(Args *args); PikaObj *New_PikaStdData_ByteArray(Args *args);
void PikaStdData_ByteArray_fromString(PikaObj *self, char* s); int PikaStdData_ByteArray___getitem__(PikaObj *self, int __key);
void PikaStdData_ByteArray___init__(PikaObj *self, Arg* bytes);
Arg* PikaStdData_ByteArray___iter__(PikaObj *self);
Arg* PikaStdData_ByteArray___next__(PikaObj *self);
void PikaStdData_ByteArray___setitem__(PikaObj *self, int __key, int __val);
char* PikaStdData_ByteArray___str__(PikaObj *self);
char* PikaStdData_ByteArray_decode(PikaObj *self);
#endif #endif

View File

@ -26,6 +26,11 @@ void PikaStdData_Dict___iter__Method(PikaObj *self, Args *args){
method_returnArg(args, res); method_returnArg(args, res);
} }
void PikaStdData_Dict___len__Method(PikaObj *self, Args *args){
int res = PikaStdData_Dict___len__(self);
method_returnInt(args, res);
}
void PikaStdData_Dict___next__Method(PikaObj *self, Args *args){ void PikaStdData_Dict___next__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_Dict___next__(self); Arg* res = PikaStdData_Dict___next__(self);
method_returnArg(args, res); method_returnArg(args, res);
@ -37,21 +42,31 @@ void PikaStdData_Dict___setitem__Method(PikaObj *self, Args *args){
PikaStdData_Dict___setitem__(self, __key, __val); PikaStdData_Dict___setitem__(self, __key, __val);
} }
void PikaStdData_Dict___str__Method(PikaObj *self, Args *args){
char* res = PikaStdData_Dict___str__(self);
method_returnStr(args, res);
}
void PikaStdData_Dict_getMethod(PikaObj *self, Args *args){ void PikaStdData_Dict_getMethod(PikaObj *self, Args *args){
char* key = args_getStr(args, "key"); char* key = args_getStr(args, "key");
Arg* res = PikaStdData_Dict_get(self, key); Arg* res = PikaStdData_Dict_get(self, key);
method_returnArg(args, res); method_returnArg(args, res);
} }
void PikaStdData_Dict_keysMethod(PikaObj *self, Args *args){
PikaObj* res = PikaStdData_Dict_keys(self);
method_returnObj(args, res);
}
void PikaStdData_Dict_removeMethod(PikaObj *self, Args *args){ void PikaStdData_Dict_removeMethod(PikaObj *self, Args *args){
char* key = args_getStr(args, "key"); char* key = args_getStr(args, "key");
PikaStdData_Dict_remove(self, key); PikaStdData_Dict_remove(self, key);
} }
void PikaStdData_Dict_setMethod(PikaObj *self, Args *args){ void PikaStdData_Dict_setMethod(PikaObj *self, Args *args){
Arg* arg = args_getArg(args, "arg");
char* key = args_getStr(args, "key"); char* key = args_getStr(args, "key");
PikaStdData_Dict_set(self, arg, key); Arg* arg = args_getArg(args, "arg");
PikaStdData_Dict_set(self, key, arg);
} }
PikaObj *New_PikaStdData_Dict(Args *args){ PikaObj *New_PikaStdData_Dict(Args *args){
@ -60,9 +75,12 @@ PikaObj *New_PikaStdData_Dict(Args *args){
class_defineMethod(self, "__getitem__(__key:any)->any", PikaStdData_Dict___getitem__Method); class_defineMethod(self, "__getitem__(__key:any)->any", PikaStdData_Dict___getitem__Method);
class_defineMethod(self, "__init__()", PikaStdData_Dict___init__Method); class_defineMethod(self, "__init__()", PikaStdData_Dict___init__Method);
class_defineMethod(self, "__iter__()->any", PikaStdData_Dict___iter__Method); class_defineMethod(self, "__iter__()->any", PikaStdData_Dict___iter__Method);
class_defineMethod(self, "__len__()->int", PikaStdData_Dict___len__Method);
class_defineMethod(self, "__next__()->any", PikaStdData_Dict___next__Method); class_defineMethod(self, "__next__()->any", PikaStdData_Dict___next__Method);
class_defineMethod(self, "__setitem__(__key:any,__val:any)", PikaStdData_Dict___setitem__Method); class_defineMethod(self, "__setitem__(__key:any,__val:any)", PikaStdData_Dict___setitem__Method);
class_defineMethod(self, "__str__()->str", PikaStdData_Dict___str__Method);
class_defineMethod(self, "get(key:str)->any", PikaStdData_Dict_getMethod); class_defineMethod(self, "get(key:str)->any", PikaStdData_Dict_getMethod);
class_defineMethod(self, "keys()->dict_keys", PikaStdData_Dict_keysMethod);
class_defineMethod(self, "remove(key:str)", PikaStdData_Dict_removeMethod); class_defineMethod(self, "remove(key:str)", PikaStdData_Dict_removeMethod);
class_defineMethod(self, "set(key:str,arg:any)", PikaStdData_Dict_setMethod); class_defineMethod(self, "set(key:str,arg:any)", PikaStdData_Dict_setMethod);
return self; return self;

View File

@ -13,10 +13,13 @@ void PikaStdData_Dict___del__(PikaObj *self);
Arg* PikaStdData_Dict___getitem__(PikaObj *self, Arg* __key); Arg* PikaStdData_Dict___getitem__(PikaObj *self, Arg* __key);
void PikaStdData_Dict___init__(PikaObj *self); void PikaStdData_Dict___init__(PikaObj *self);
Arg* PikaStdData_Dict___iter__(PikaObj *self); Arg* PikaStdData_Dict___iter__(PikaObj *self);
int PikaStdData_Dict___len__(PikaObj *self);
Arg* PikaStdData_Dict___next__(PikaObj *self); Arg* PikaStdData_Dict___next__(PikaObj *self);
void PikaStdData_Dict___setitem__(PikaObj *self, Arg* __key, Arg* __val); void PikaStdData_Dict___setitem__(PikaObj *self, Arg* __key, Arg* __val);
char* PikaStdData_Dict___str__(PikaObj *self);
Arg* PikaStdData_Dict_get(PikaObj *self, char* key); Arg* PikaStdData_Dict_get(PikaObj *self, char* key);
PikaObj* PikaStdData_Dict_keys(PikaObj *self);
void PikaStdData_Dict_remove(PikaObj *self, char* key); void PikaStdData_Dict_remove(PikaObj *self, char* key);
void PikaStdData_Dict_set(PikaObj *self, Arg* arg, char* key); void PikaStdData_Dict_set(PikaObj *self, char* key, Arg* arg);
#endif #endif

View File

@ -0,0 +1,75 @@
/* ******************************** */
/* Warning! Don't modify this file! */
/* ******************************** */
#include "PikaStdData_FILEIO.h"
#include "TinyObj.h"
#include <stdio.h>
#include <stdlib.h>
#include "BaseObj.h"
void PikaStdData_FILEIO_closeMethod(PikaObj *self, Args *args){
PikaStdData_FILEIO_close(self);
}
void PikaStdData_FILEIO_initMethod(PikaObj *self, Args *args){
char* path = args_getStr(args, "path");
char* mode = args_getStr(args, "mode");
PikaStdData_FILEIO_init(self, path, mode);
}
void PikaStdData_FILEIO_readMethod(PikaObj *self, Args *args){
int size = args_getInt(args, "size");
Arg* res = PikaStdData_FILEIO_read(self, size);
method_returnArg(args, res);
}
void PikaStdData_FILEIO_readlineMethod(PikaObj *self, Args *args){
char* res = PikaStdData_FILEIO_readline(self);
method_returnStr(args, res);
}
void PikaStdData_FILEIO_readlinesMethod(PikaObj *self, Args *args){
PikaObj* res = PikaStdData_FILEIO_readlines(self);
method_returnObj(args, res);
}
void PikaStdData_FILEIO_seekMethod(PikaObj *self, Args *args){
int offset = args_getInt(args, "offset");
PikaTuple* fromwhere = args_getPtr(args, "fromwhere");
int res = PikaStdData_FILEIO_seek(self, offset, fromwhere);
method_returnInt(args, res);
}
void PikaStdData_FILEIO_tellMethod(PikaObj *self, Args *args){
int res = PikaStdData_FILEIO_tell(self);
method_returnInt(args, res);
}
void PikaStdData_FILEIO_writeMethod(PikaObj *self, Args *args){
Arg* s = args_getArg(args, "s");
int res = PikaStdData_FILEIO_write(self, s);
method_returnInt(args, res);
}
void PikaStdData_FILEIO_writelinesMethod(PikaObj *self, Args *args){
PikaObj* lines = args_getPtr(args, "lines");
PikaStdData_FILEIO_writelines(self, lines);
}
PikaObj *New_PikaStdData_FILEIO(Args *args){
PikaObj *self = New_TinyObj(args);
class_defineMethod(self, "close()", PikaStdData_FILEIO_closeMethod);
class_defineMethod(self, "init(path:str,mode:str)", PikaStdData_FILEIO_initMethod);
class_defineMethod(self, "read(size:int)->any", PikaStdData_FILEIO_readMethod);
class_defineMethod(self, "readline()->str", PikaStdData_FILEIO_readlineMethod);
class_defineMethod(self, "readlines()->List", PikaStdData_FILEIO_readlinesMethod);
class_defineMethod(self, "seek(offset:int,*fromwhere)->int", PikaStdData_FILEIO_seekMethod);
class_defineMethod(self, "tell()->int", PikaStdData_FILEIO_tellMethod);
class_defineMethod(self, "write(s:any)->int", PikaStdData_FILEIO_writeMethod);
class_defineMethod(self, "writelines(lines:List)", PikaStdData_FILEIO_writelinesMethod);
return self;
}
Arg *PikaStdData_FILEIO(PikaObj *self){
return obj_newObjInPackage(New_PikaStdData_FILEIO);
}

View File

@ -0,0 +1,22 @@
/* ******************************** */
/* Warning! Don't modify this file! */
/* ******************************** */
#ifndef __PikaStdData_FILEIO__H
#define __PikaStdData_FILEIO__H
#include <stdio.h>
#include <stdlib.h>
#include "PikaObj.h"
PikaObj *New_PikaStdData_FILEIO(Args *args);
void PikaStdData_FILEIO_close(PikaObj *self);
void PikaStdData_FILEIO_init(PikaObj *self, char* path, char* mode);
Arg* PikaStdData_FILEIO_read(PikaObj *self, int size);
char* PikaStdData_FILEIO_readline(PikaObj *self);
PikaObj* PikaStdData_FILEIO_readlines(PikaObj *self);
int PikaStdData_FILEIO_seek(PikaObj *self, int offset, PikaTuple* fromwhere);
int PikaStdData_FILEIO_tell(PikaObj *self);
int PikaStdData_FILEIO_write(PikaObj *self, Arg* s);
void PikaStdData_FILEIO_writelines(PikaObj *self, PikaObj* lines);
#endif

View File

@ -2,74 +2,43 @@
/* Warning! Don't modify this file! */ /* Warning! Don't modify this file! */
/* ******************************** */ /* ******************************** */
#include "PikaStdData_List.h" #include "PikaStdData_List.h"
#include "TinyObj.h" #include "PikaStdData_Tuple.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "BaseObj.h" #include "BaseObj.h"
void PikaStdData_List___del__Method(PikaObj *self, Args *args){
PikaStdData_List___del__(self);
}
void PikaStdData_List___getitem__Method(PikaObj *self, Args *args){
Arg* __key = args_getArg(args, "__key");
Arg* res = PikaStdData_List___getitem__(self, __key);
method_returnArg(args, res);
}
void PikaStdData_List___init__Method(PikaObj *self, Args *args){ void PikaStdData_List___init__Method(PikaObj *self, Args *args){
PikaStdData_List___init__(self); PikaStdData_List___init__(self);
} }
void PikaStdData_List___iter__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_List___iter__(self);
method_returnArg(args, res);
}
void PikaStdData_List___next__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_List___next__(self);
method_returnArg(args, res);
}
void PikaStdData_List___setitem__Method(PikaObj *self, Args *args){ void PikaStdData_List___setitem__Method(PikaObj *self, Args *args){
Arg* __key = args_getArg(args, "__key"); Arg* __key = args_getArg(args, "__key");
Arg* __val = args_getArg(args, "__val"); Arg* __val = args_getArg(args, "__val");
PikaStdData_List___setitem__(self, __key, __val); PikaStdData_List___setitem__(self, __key, __val);
} }
void PikaStdData_List___str__Method(PikaObj *self, Args *args){
char* res = PikaStdData_List___str__(self);
method_returnStr(args, res);
}
void PikaStdData_List_appendMethod(PikaObj *self, Args *args){ void PikaStdData_List_appendMethod(PikaObj *self, Args *args){
Arg* arg = args_getArg(args, "arg"); Arg* arg = args_getArg(args, "arg");
PikaStdData_List_append(self, arg); PikaStdData_List_append(self, arg);
} }
void PikaStdData_List_getMethod(PikaObj *self, Args *args){
int i = args_getInt(args, "i");
Arg* res = PikaStdData_List_get(self, i);
method_returnArg(args, res);
}
void PikaStdData_List_lenMethod(PikaObj *self, Args *args){
int res = PikaStdData_List_len(self);
method_returnInt(args, res);
}
void PikaStdData_List_setMethod(PikaObj *self, Args *args){ void PikaStdData_List_setMethod(PikaObj *self, Args *args){
Arg* arg = args_getArg(args, "arg");
int i = args_getInt(args, "i"); int i = args_getInt(args, "i");
PikaStdData_List_set(self, arg, i); Arg* arg = args_getArg(args, "arg");
PikaStdData_List_set(self, i, arg);
} }
PikaObj *New_PikaStdData_List(Args *args){ PikaObj *New_PikaStdData_List(Args *args){
PikaObj *self = New_TinyObj(args); PikaObj *self = New_PikaStdData_Tuple(args);
class_defineMethod(self, "__del__()", PikaStdData_List___del__Method);
class_defineMethod(self, "__getitem__(__key:any)->any", PikaStdData_List___getitem__Method);
class_defineMethod(self, "__init__()", PikaStdData_List___init__Method); class_defineMethod(self, "__init__()", PikaStdData_List___init__Method);
class_defineMethod(self, "__iter__()->any", PikaStdData_List___iter__Method);
class_defineMethod(self, "__next__()->any", PikaStdData_List___next__Method);
class_defineMethod(self, "__setitem__(__key:any,__val:any)", PikaStdData_List___setitem__Method); class_defineMethod(self, "__setitem__(__key:any,__val:any)", PikaStdData_List___setitem__Method);
class_defineMethod(self, "__str__()->str", PikaStdData_List___str__Method);
class_defineMethod(self, "append(arg:any)", PikaStdData_List_appendMethod); class_defineMethod(self, "append(arg:any)", PikaStdData_List_appendMethod);
class_defineMethod(self, "get(i:int)->any", PikaStdData_List_getMethod);
class_defineMethod(self, "len()->int", PikaStdData_List_lenMethod);
class_defineMethod(self, "set(i:int,arg:any)", PikaStdData_List_setMethod); class_defineMethod(self, "set(i:int,arg:any)", PikaStdData_List_setMethod);
return self; return self;
} }

View File

@ -9,15 +9,10 @@
PikaObj *New_PikaStdData_List(Args *args); PikaObj *New_PikaStdData_List(Args *args);
void PikaStdData_List___del__(PikaObj *self);
Arg* PikaStdData_List___getitem__(PikaObj *self, Arg* __key);
void PikaStdData_List___init__(PikaObj *self); void PikaStdData_List___init__(PikaObj *self);
Arg* PikaStdData_List___iter__(PikaObj *self);
Arg* PikaStdData_List___next__(PikaObj *self);
void PikaStdData_List___setitem__(PikaObj *self, Arg* __key, Arg* __val); void PikaStdData_List___setitem__(PikaObj *self, Arg* __key, Arg* __val);
char* PikaStdData_List___str__(PikaObj *self);
void PikaStdData_List_append(PikaObj *self, Arg* arg); void PikaStdData_List_append(PikaObj *self, Arg* arg);
Arg* PikaStdData_List_get(PikaObj *self, int i); void PikaStdData_List_set(PikaObj *self, int i, Arg* arg);
int PikaStdData_List_len(PikaObj *self);
void PikaStdData_List_set(PikaObj *self, Arg* arg, int i);
#endif #endif

View File

@ -23,6 +23,11 @@ void PikaStdData_String___iter__Method(PikaObj *self, Args *args){
method_returnArg(args, res); method_returnArg(args, res);
} }
void PikaStdData_String___len__Method(PikaObj *self, Args *args){
int res = PikaStdData_String___len__(self);
method_returnInt(args, res);
}
void PikaStdData_String___next__Method(PikaObj *self, Args *args){ void PikaStdData_String___next__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_String___next__(self); Arg* res = PikaStdData_String___next__(self);
method_returnArg(args, res); method_returnArg(args, res);
@ -39,6 +44,11 @@ void PikaStdData_String___str__Method(PikaObj *self, Args *args){
method_returnStr(args, res); method_returnStr(args, res);
} }
void PikaStdData_String_encodeMethod(PikaObj *self, Args *args){
Arg* res = PikaStdData_String_encode(self);
method_returnArg(args, res);
}
void PikaStdData_String_endwithMethod(PikaObj *self, Args *args){ void PikaStdData_String_endwithMethod(PikaObj *self, Args *args){
char* suffix = args_getStr(args, "suffix"); char* suffix = args_getStr(args, "suffix");
int res = PikaStdData_String_endwith(self, suffix); int res = PikaStdData_String_endwith(self, suffix);
@ -75,25 +85,45 @@ void PikaStdData_String_isspaceMethod(PikaObj *self, Args *args){
method_returnInt(args, res); method_returnInt(args, res);
} }
void PikaStdData_String_replaceMethod(PikaObj *self, Args *args){
char* old = args_getStr(args, "old");
char* new = args_getStr(args, "new");
char* res = PikaStdData_String_replace(self, old, new);
method_returnStr(args, res);
}
void PikaStdData_String_setMethod(PikaObj *self, Args *args){ void PikaStdData_String_setMethod(PikaObj *self, Args *args){
char* s = args_getStr(args, "s"); char* s = args_getStr(args, "s");
PikaStdData_String_set(self, s); PikaStdData_String_set(self, s);
} }
void PikaStdData_String_splitMethod(PikaObj *self, Args *args){
char* s = args_getStr(args, "s");
PikaObj* res = PikaStdData_String_split(self, s);
method_returnObj(args, res);
}
void PikaStdData_String_startwithMethod(PikaObj *self, Args *args){ void PikaStdData_String_startwithMethod(PikaObj *self, Args *args){
char* prefix = args_getStr(args, "prefix"); char* prefix = args_getStr(args, "prefix");
int res = PikaStdData_String_startwith(self, prefix); int res = PikaStdData_String_startwith(self, prefix);
method_returnInt(args, res); method_returnInt(args, res);
} }
void PikaStdData_String_stripMethod(PikaObj *self, Args *args){
char* res = PikaStdData_String_strip(self);
method_returnStr(args, res);
}
PikaObj *New_PikaStdData_String(Args *args){ PikaObj *New_PikaStdData_String(Args *args){
PikaObj *self = New_TinyObj(args); PikaObj *self = New_TinyObj(args);
class_defineMethod(self, "__getitem__(__key:any)->any", PikaStdData_String___getitem__Method); class_defineMethod(self, "__getitem__(__key:any)->any", PikaStdData_String___getitem__Method);
class_defineMethod(self, "__init__(s:str)", PikaStdData_String___init__Method); class_defineMethod(self, "__init__(s:str)", PikaStdData_String___init__Method);
class_defineMethod(self, "__iter__()->any", PikaStdData_String___iter__Method); class_defineMethod(self, "__iter__()->any", PikaStdData_String___iter__Method);
class_defineMethod(self, "__len__()->int", PikaStdData_String___len__Method);
class_defineMethod(self, "__next__()->any", PikaStdData_String___next__Method); class_defineMethod(self, "__next__()->any", PikaStdData_String___next__Method);
class_defineMethod(self, "__setitem__(__key:any,__val:any)", PikaStdData_String___setitem__Method); class_defineMethod(self, "__setitem__(__key:any,__val:any)", PikaStdData_String___setitem__Method);
class_defineMethod(self, "__str__()->str", PikaStdData_String___str__Method); class_defineMethod(self, "__str__()->str", PikaStdData_String___str__Method);
class_defineMethod(self, "encode()->bytes", PikaStdData_String_encodeMethod);
class_defineMethod(self, "endwith(suffix:str)->int", PikaStdData_String_endwithMethod); class_defineMethod(self, "endwith(suffix:str)->int", PikaStdData_String_endwithMethod);
class_defineMethod(self, "get()->str", PikaStdData_String_getMethod); class_defineMethod(self, "get()->str", PikaStdData_String_getMethod);
class_defineMethod(self, "isalnum()->int", PikaStdData_String_isalnumMethod); class_defineMethod(self, "isalnum()->int", PikaStdData_String_isalnumMethod);
@ -101,8 +131,11 @@ PikaObj *New_PikaStdData_String(Args *args){
class_defineMethod(self, "isdigit()->int", PikaStdData_String_isdigitMethod); class_defineMethod(self, "isdigit()->int", PikaStdData_String_isdigitMethod);
class_defineMethod(self, "islower()->int", PikaStdData_String_islowerMethod); class_defineMethod(self, "islower()->int", PikaStdData_String_islowerMethod);
class_defineMethod(self, "isspace()->int", PikaStdData_String_isspaceMethod); class_defineMethod(self, "isspace()->int", PikaStdData_String_isspaceMethod);
class_defineMethod(self, "replace(old:str,new:str)->str", PikaStdData_String_replaceMethod);
class_defineMethod(self, "set(s:str)", PikaStdData_String_setMethod); class_defineMethod(self, "set(s:str)", PikaStdData_String_setMethod);
class_defineMethod(self, "split(s:str)->List", PikaStdData_String_splitMethod);
class_defineMethod(self, "startwith(prefix:str)->int", PikaStdData_String_startwithMethod); class_defineMethod(self, "startwith(prefix:str)->int", PikaStdData_String_startwithMethod);
class_defineMethod(self, "strip()->str", PikaStdData_String_stripMethod);
return self; return self;
} }

View File

@ -12,9 +12,11 @@ PikaObj *New_PikaStdData_String(Args *args);
Arg* PikaStdData_String___getitem__(PikaObj *self, Arg* __key); Arg* PikaStdData_String___getitem__(PikaObj *self, Arg* __key);
void PikaStdData_String___init__(PikaObj *self, char* s); void PikaStdData_String___init__(PikaObj *self, char* s);
Arg* PikaStdData_String___iter__(PikaObj *self); Arg* PikaStdData_String___iter__(PikaObj *self);
int PikaStdData_String___len__(PikaObj *self);
Arg* PikaStdData_String___next__(PikaObj *self); Arg* PikaStdData_String___next__(PikaObj *self);
void PikaStdData_String___setitem__(PikaObj *self, Arg* __key, Arg* __val); void PikaStdData_String___setitem__(PikaObj *self, Arg* __key, Arg* __val);
char* PikaStdData_String___str__(PikaObj *self); char* PikaStdData_String___str__(PikaObj *self);
Arg* PikaStdData_String_encode(PikaObj *self);
int PikaStdData_String_endwith(PikaObj *self, char* suffix); int PikaStdData_String_endwith(PikaObj *self, char* suffix);
char* PikaStdData_String_get(PikaObj *self); char* PikaStdData_String_get(PikaObj *self);
int PikaStdData_String_isalnum(PikaObj *self); int PikaStdData_String_isalnum(PikaObj *self);
@ -22,7 +24,10 @@ int PikaStdData_String_isalpha(PikaObj *self);
int PikaStdData_String_isdigit(PikaObj *self); int PikaStdData_String_isdigit(PikaObj *self);
int PikaStdData_String_islower(PikaObj *self); int PikaStdData_String_islower(PikaObj *self);
int PikaStdData_String_isspace(PikaObj *self); int PikaStdData_String_isspace(PikaObj *self);
char* PikaStdData_String_replace(PikaObj *self, char* old, char* new);
void PikaStdData_String_set(PikaObj *self, char* s); void PikaStdData_String_set(PikaObj *self, char* s);
PikaObj* PikaStdData_String_split(PikaObj *self, char* s);
int PikaStdData_String_startwith(PikaObj *self, char* prefix); int PikaStdData_String_startwith(PikaObj *self, char* prefix);
char* PikaStdData_String_strip(PikaObj *self);
#endif #endif

View File

@ -0,0 +1,71 @@
/* ******************************** */
/* Warning! Don't modify this file! */
/* ******************************** */
#include "PikaStdData_Tuple.h"
#include "TinyObj.h"
#include <stdio.h>
#include <stdlib.h>
#include "BaseObj.h"
void PikaStdData_Tuple___del__Method(PikaObj *self, Args *args){
PikaStdData_Tuple___del__(self);
}
void PikaStdData_Tuple___getitem__Method(PikaObj *self, Args *args){
Arg* __key = args_getArg(args, "__key");
Arg* res = PikaStdData_Tuple___getitem__(self, __key);
method_returnArg(args, res);
}
void PikaStdData_Tuple___init__Method(PikaObj *self, Args *args){
PikaStdData_Tuple___init__(self);
}
void PikaStdData_Tuple___iter__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_Tuple___iter__(self);
method_returnArg(args, res);
}
void PikaStdData_Tuple___len__Method(PikaObj *self, Args *args){
int res = PikaStdData_Tuple___len__(self);
method_returnInt(args, res);
}
void PikaStdData_Tuple___next__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_Tuple___next__(self);
method_returnArg(args, res);
}
void PikaStdData_Tuple___str__Method(PikaObj *self, Args *args){
char* res = PikaStdData_Tuple___str__(self);
method_returnStr(args, res);
}
void PikaStdData_Tuple_getMethod(PikaObj *self, Args *args){
int i = args_getInt(args, "i");
Arg* res = PikaStdData_Tuple_get(self, i);
method_returnArg(args, res);
}
void PikaStdData_Tuple_lenMethod(PikaObj *self, Args *args){
int res = PikaStdData_Tuple_len(self);
method_returnInt(args, res);
}
PikaObj *New_PikaStdData_Tuple(Args *args){
PikaObj *self = New_TinyObj(args);
class_defineMethod(self, "__del__()", PikaStdData_Tuple___del__Method);
class_defineMethod(self, "__getitem__(__key:any)->any", PikaStdData_Tuple___getitem__Method);
class_defineMethod(self, "__init__()", PikaStdData_Tuple___init__Method);
class_defineMethod(self, "__iter__()->any", PikaStdData_Tuple___iter__Method);
class_defineMethod(self, "__len__()->int", PikaStdData_Tuple___len__Method);
class_defineMethod(self, "__next__()->any", PikaStdData_Tuple___next__Method);
class_defineMethod(self, "__str__()->str", PikaStdData_Tuple___str__Method);
class_defineMethod(self, "get(i:int)->any", PikaStdData_Tuple_getMethod);
class_defineMethod(self, "len()->int", PikaStdData_Tuple_lenMethod);
return self;
}
Arg *PikaStdData_Tuple(PikaObj *self){
return obj_newObjInPackage(New_PikaStdData_Tuple);
}

View File

@ -0,0 +1,22 @@
/* ******************************** */
/* Warning! Don't modify this file! */
/* ******************************** */
#ifndef __PikaStdData_Tuple__H
#define __PikaStdData_Tuple__H
#include <stdio.h>
#include <stdlib.h>
#include "PikaObj.h"
PikaObj *New_PikaStdData_Tuple(Args *args);
void PikaStdData_Tuple___del__(PikaObj *self);
Arg* PikaStdData_Tuple___getitem__(PikaObj *self, Arg* __key);
void PikaStdData_Tuple___init__(PikaObj *self);
Arg* PikaStdData_Tuple___iter__(PikaObj *self);
int PikaStdData_Tuple___len__(PikaObj *self);
Arg* PikaStdData_Tuple___next__(PikaObj *self);
char* PikaStdData_Tuple___str__(PikaObj *self);
Arg* PikaStdData_Tuple_get(PikaObj *self, int i);
int PikaStdData_Tuple_len(PikaObj *self);
#endif

View File

@ -0,0 +1,41 @@
/* ******************************** */
/* Warning! Don't modify this file! */
/* ******************************** */
#include "PikaStdData_dict_keys.h"
#include "TinyObj.h"
#include <stdio.h>
#include <stdlib.h>
#include "BaseObj.h"
void PikaStdData_dict_keys___iter__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_dict_keys___iter__(self);
method_returnArg(args, res);
}
void PikaStdData_dict_keys___len__Method(PikaObj *self, Args *args){
int res = PikaStdData_dict_keys___len__(self);
method_returnInt(args, res);
}
void PikaStdData_dict_keys___next__Method(PikaObj *self, Args *args){
Arg* res = PikaStdData_dict_keys___next__(self);
method_returnArg(args, res);
}
void PikaStdData_dict_keys___str__Method(PikaObj *self, Args *args){
char* res = PikaStdData_dict_keys___str__(self);
method_returnStr(args, res);
}
PikaObj *New_PikaStdData_dict_keys(Args *args){
PikaObj *self = New_TinyObj(args);
class_defineMethod(self, "__iter__()->any", PikaStdData_dict_keys___iter__Method);
class_defineMethod(self, "__len__()->int", PikaStdData_dict_keys___len__Method);
class_defineMethod(self, "__next__()->any", PikaStdData_dict_keys___next__Method);
class_defineMethod(self, "__str__()->str", PikaStdData_dict_keys___str__Method);
return self;
}
Arg *PikaStdData_dict_keys(PikaObj *self){
return obj_newObjInPackage(New_PikaStdData_dict_keys);
}

View File

@ -0,0 +1,17 @@
/* ******************************** */
/* Warning! Don't modify this file! */
/* ******************************** */
#ifndef __PikaStdData_dict_keys__H
#define __PikaStdData_dict_keys__H
#include <stdio.h>
#include <stdlib.h>
#include "PikaObj.h"
PikaObj *New_PikaStdData_dict_keys(Args *args);
Arg* PikaStdData_dict_keys___iter__(PikaObj *self);
int PikaStdData_dict_keys___len__(PikaObj *self);
Arg* PikaStdData_dict_keys___next__(PikaObj *self);
char* PikaStdData_dict_keys___str__(PikaObj *self);
#endif

View File

@ -2,32 +2,32 @@
/* Warning! Don't modify this file! */ /* Warning! Don't modify this file! */
/* ******************************** */ /* ******************************** */
#include "PikaStdLib_SysObj.h" #include "PikaStdLib_SysObj.h"
#include "BaseObj.h" #include "TinyObj.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "BaseObj.h" #include "BaseObj.h"
void PikaStdLib_SysObj___getitem__Method(PikaObj *self, Args *args){ void PikaStdLib_SysObj___getitem__Method(PikaObj *self, Args *args){
Arg* key = args_getArg(args, "key");
Arg* obj = args_getArg(args, "obj"); Arg* obj = args_getArg(args, "obj");
Arg* res = PikaStdLib_SysObj___getitem__(self, key, obj); Arg* key = args_getArg(args, "key");
Arg* res = PikaStdLib_SysObj___getitem__(self, obj, key);
method_returnArg(args, res); method_returnArg(args, res);
} }
void PikaStdLib_SysObj___setitem__Method(PikaObj *self, Args *args){ void PikaStdLib_SysObj___setitem__Method(PikaObj *self, Args *args){
Arg* key = args_getArg(args, "key");
Arg* obj = args_getArg(args, "obj"); Arg* obj = args_getArg(args, "obj");
char* obj_str = args_getStr(args, "obj_str"); Arg* key = args_getArg(args, "key");
Arg* val = args_getArg(args, "val"); Arg* val = args_getArg(args, "val");
PikaStdLib_SysObj___setitem__(self, key, obj, obj_str, val); Arg* res = PikaStdLib_SysObj___setitem__(self, obj, key, val);
method_returnArg(args, res);
} }
void PikaStdLib_SysObj___slice__Method(PikaObj *self, Args *args){ void PikaStdLib_SysObj___slice__Method(PikaObj *self, Args *args){
Arg* end = args_getArg(args, "end");
Arg* obj = args_getArg(args, "obj"); Arg* obj = args_getArg(args, "obj");
Arg* start = args_getArg(args, "start"); Arg* start = args_getArg(args, "start");
Arg* end = args_getArg(args, "end");
int step = args_getInt(args, "step"); int step = args_getInt(args, "step");
Arg* res = PikaStdLib_SysObj___slice__(self, end, obj, start, step); Arg* res = PikaStdLib_SysObj___slice__(self, obj, start, end, step);
method_returnArg(args, res); method_returnArg(args, res);
} }
@ -96,6 +96,13 @@ void PikaStdLib_SysObj_listMethod(PikaObj *self, Args *args){
method_returnArg(args, res); method_returnArg(args, res);
} }
void PikaStdLib_SysObj_openMethod(PikaObj *self, Args *args){
char* path = args_getStr(args, "path");
char* mode = args_getStr(args, "mode");
PikaObj* res = PikaStdLib_SysObj_open(self, path, mode);
method_returnObj(args, res);
}
void PikaStdLib_SysObj_ordMethod(PikaObj *self, Args *args){ void PikaStdLib_SysObj_ordMethod(PikaObj *self, Args *args){
char* val = args_getStr(args, "val"); char* val = args_getStr(args, "val");
int res = PikaStdLib_SysObj_ord(self, val); int res = PikaStdLib_SysObj_ord(self, val);
@ -132,13 +139,14 @@ void PikaStdLib_SysObj_strMethod(PikaObj *self, Args *args){
void PikaStdLib_SysObj_typeMethod(PikaObj *self, Args *args){ void PikaStdLib_SysObj_typeMethod(PikaObj *self, Args *args){
Arg* arg = args_getArg(args, "arg"); Arg* arg = args_getArg(args, "arg");
PikaStdLib_SysObj_type(self, arg); Arg* res = PikaStdLib_SysObj_type(self, arg);
method_returnArg(args, res);
} }
PikaObj *New_PikaStdLib_SysObj(Args *args){ PikaObj *New_PikaStdLib_SysObj(Args *args){
PikaObj *self = New_BaseObj(args); PikaObj *self = New_TinyObj(args);
class_defineMethod(self, "__getitem__(obj:any,key:any)->any", PikaStdLib_SysObj___getitem__Method); class_defineMethod(self, "__getitem__(obj:any,key:any)->any", PikaStdLib_SysObj___getitem__Method);
class_defineMethod(self, "__setitem__(obj:any,key:any,val:any,obj_str:str)", PikaStdLib_SysObj___setitem__Method); class_defineMethod(self, "__setitem__(obj:any,key:any,val:any)->any", PikaStdLib_SysObj___setitem__Method);
class_defineMethod(self, "__slice__(obj:any,start:any,end:any,step:int)->any", PikaStdLib_SysObj___slice__Method); class_defineMethod(self, "__slice__(obj:any,start:any,end:any,step:int)->any", PikaStdLib_SysObj___slice__Method);
class_defineMethod(self, "bytes(val:any)->bytes", PikaStdLib_SysObj_bytesMethod); class_defineMethod(self, "bytes(val:any)->bytes", PikaStdLib_SysObj_bytesMethod);
class_defineMethod(self, "cformat(fmt:str,*var)->str", PikaStdLib_SysObj_cformatMethod); class_defineMethod(self, "cformat(fmt:str,*var)->str", PikaStdLib_SysObj_cformatMethod);
@ -151,13 +159,14 @@ PikaObj *New_PikaStdLib_SysObj(Args *args){
class_defineMethod(self, "iter(arg:any)->any", PikaStdLib_SysObj_iterMethod); class_defineMethod(self, "iter(arg:any)->any", PikaStdLib_SysObj_iterMethod);
class_defineMethod(self, "len(arg:any)->int", PikaStdLib_SysObj_lenMethod); class_defineMethod(self, "len(arg:any)->int", PikaStdLib_SysObj_lenMethod);
class_defineMethod(self, "list()->any", PikaStdLib_SysObj_listMethod); class_defineMethod(self, "list()->any", PikaStdLib_SysObj_listMethod);
class_defineMethod(self, "open(path:str,mode:str)->object", PikaStdLib_SysObj_openMethod);
class_defineMethod(self, "ord(val:str)->int", PikaStdLib_SysObj_ordMethod); class_defineMethod(self, "ord(val:str)->int", PikaStdLib_SysObj_ordMethod);
class_defineMethod(self, "print(*val)", PikaStdLib_SysObj_printMethod); class_defineMethod(self, "print(*val)", PikaStdLib_SysObj_printMethod);
class_defineMethod(self, "printNoEnd(val:any)", PikaStdLib_SysObj_printNoEndMethod); class_defineMethod(self, "printNoEnd(val:any)", PikaStdLib_SysObj_printNoEndMethod);
class_defineMethod(self, "range(a1:int,a2:int)->any", PikaStdLib_SysObj_rangeMethod); class_defineMethod(self, "range(a1:int,a2:int)->any", PikaStdLib_SysObj_rangeMethod);
class_defineMethod(self, "remove(argPath:str)", PikaStdLib_SysObj_removeMethod); class_defineMethod(self, "remove(argPath:str)", PikaStdLib_SysObj_removeMethod);
class_defineMethod(self, "str(arg:any)->str", PikaStdLib_SysObj_strMethod); class_defineMethod(self, "str(arg:any)->str", PikaStdLib_SysObj_strMethod);
class_defineMethod(self, "type(arg:any)", PikaStdLib_SysObj_typeMethod); class_defineMethod(self, "type(arg:any)->any", PikaStdLib_SysObj_typeMethod);
return self; return self;
} }

View File

@ -9,9 +9,9 @@
PikaObj *New_PikaStdLib_SysObj(Args *args); PikaObj *New_PikaStdLib_SysObj(Args *args);
Arg* PikaStdLib_SysObj___getitem__(PikaObj *self, Arg* key, Arg* obj); Arg* PikaStdLib_SysObj___getitem__(PikaObj *self, Arg* obj, Arg* key);
void PikaStdLib_SysObj___setitem__(PikaObj *self, Arg* key, Arg* obj, char* obj_str, Arg* val); Arg* PikaStdLib_SysObj___setitem__(PikaObj *self, Arg* obj, Arg* key, Arg* val);
Arg* PikaStdLib_SysObj___slice__(PikaObj *self, Arg* end, Arg* obj, Arg* start, int step); Arg* PikaStdLib_SysObj___slice__(PikaObj *self, Arg* obj, Arg* start, Arg* end, int step);
Arg* PikaStdLib_SysObj_bytes(PikaObj *self, Arg* val); Arg* PikaStdLib_SysObj_bytes(PikaObj *self, Arg* val);
char* PikaStdLib_SysObj_cformat(PikaObj *self, char* fmt, PikaTuple* var); char* PikaStdLib_SysObj_cformat(PikaObj *self, char* fmt, PikaTuple* var);
char* PikaStdLib_SysObj_chr(PikaObj *self, int val); char* PikaStdLib_SysObj_chr(PikaObj *self, int val);
@ -23,12 +23,13 @@ int PikaStdLib_SysObj_int(PikaObj *self, Arg* arg);
Arg* PikaStdLib_SysObj_iter(PikaObj *self, Arg* arg); Arg* PikaStdLib_SysObj_iter(PikaObj *self, Arg* arg);
int PikaStdLib_SysObj_len(PikaObj *self, Arg* arg); int PikaStdLib_SysObj_len(PikaObj *self, Arg* arg);
Arg* PikaStdLib_SysObj_list(PikaObj *self); Arg* PikaStdLib_SysObj_list(PikaObj *self);
PikaObj* PikaStdLib_SysObj_open(PikaObj *self, char* path, char* mode);
int PikaStdLib_SysObj_ord(PikaObj *self, char* val); int PikaStdLib_SysObj_ord(PikaObj *self, char* val);
void PikaStdLib_SysObj_print(PikaObj *self, PikaTuple* val); void PikaStdLib_SysObj_print(PikaObj *self, PikaTuple* val);
void PikaStdLib_SysObj_printNoEnd(PikaObj *self, Arg* val); void PikaStdLib_SysObj_printNoEnd(PikaObj *self, Arg* val);
Arg* PikaStdLib_SysObj_range(PikaObj *self, int a1, int a2); Arg* PikaStdLib_SysObj_range(PikaObj *self, int a1, int a2);
void PikaStdLib_SysObj_remove(PikaObj *self, char* argPath); void PikaStdLib_SysObj_remove(PikaObj *self, char* argPath);
char* PikaStdLib_SysObj_str(PikaObj *self, Arg* arg); char* PikaStdLib_SysObj_str(PikaObj *self, Arg* arg);
void PikaStdLib_SysObj_type(PikaObj *self, Arg* arg); Arg* PikaStdLib_SysObj_type(PikaObj *self, Arg* arg);
#endif #endif

View File

@ -2,7 +2,7 @@
/* Warning! Don't modify this file! */ /* Warning! Don't modify this file! */
/* ******************************** */ /* ******************************** */
#include "PikaStdTask_Task.h" #include "PikaStdTask_Task.h"
#include "TinyObj.h" #include "PikaStdLib_SysObj.h"
#include "PikaStdData_List.h" #include "PikaStdData_List.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -47,7 +47,7 @@ void PikaStdTask_Task_run_until_msMethod(PikaObj *self, Args *args){
} }
PikaObj *New_PikaStdTask_Task(Args *args){ PikaObj *New_PikaStdTask_Task(Args *args){
PikaObj *self = New_TinyObj(args); PikaObj *self = New_PikaStdLib_SysObj(args);
obj_newObj(self, "calls", "PikaStdData_List", New_PikaStdData_List); obj_newObj(self, "calls", "PikaStdData_List", New_PikaStdData_List);
class_defineMethod(self, "__init__()", PikaStdTask_Task___init__Method); class_defineMethod(self, "__init__()", PikaStdTask_Task___init__Method);
class_defineMethod(self, "call_always(fun_todo:any)", PikaStdTask_Task_call_alwaysMethod); class_defineMethod(self, "call_always(fun_todo:any)", PikaStdTask_Task_call_alwaysMethod);

File diff suppressed because one or more lines are too long

View File

@ -8,8 +8,8 @@
PikaObj *__pikaMain; PikaObj *__pikaMain;
PikaObj *pikaScriptInit(void){ PikaObj *pikaScriptInit(void){
__platform_printf("======[pikascript packages installed]======\r\n"); __platform_printf("======[pikascript packages installed]======\r\n");
__platform_printf("PikaStdLib==v1.8.7\r\n"); pks_printVersion();
__platform_printf("pikascript-core==v1.8.7\r\n"); __platform_printf("PikaStdLib==v1.10.0\r\n");
__platform_printf("===========================================\r\n"); __platform_printf("===========================================\r\n");
__pikaMain = newRootObj("pikaMain", New_PikaMain); __pikaMain = newRootObj("pikaMain", New_PikaMain);
extern unsigned char pikaModules_py_a[]; extern unsigned char pikaModules_py_a[];

View File

@ -371,7 +371,7 @@ int Lib_loadLibraryFileToArray(char* origin_file_name, char* out_folder) {
FILE* fp = __platform_fopen(output_file_path, "wb+"); FILE* fp = __platform_fopen(output_file_path, "wb+");
char* array_name = strsGetLastToken(&buffs, origin_file_name, '/'); char* array_name = strsGetLastToken(&buffs, origin_file_name, '/');
array_name = strsReplace(&buffs, array_name, ".", "_"); array_name = strsReplace(&buffs, array_name, ".", "_");
__platform_printf(" loading %s[]...\n", array_name); __platform_printf(" loading %s[]...\n", array_name);
pika_fputs("#include \"PikaPlatform.h\"\n", fp); pika_fputs("#include \"PikaPlatform.h\"\n", fp);
pika_fputs("/* warning: auto generated file, please do not modify */\n", pika_fputs("/* warning: auto generated file, please do not modify */\n",
fp); fp);
@ -404,7 +404,7 @@ static void __Maker_compileModuleWithInfo(PikaMaker* self, char* module_name) {
char* input_file_name = strsAppend(&buffs, module_name, ".py"); char* input_file_name = strsAppend(&buffs, module_name, ".py");
char* input_file_path = char* input_file_path =
strsAppend(&buffs, obj_getStr(self, "pwd"), input_file_name); strsAppend(&buffs, obj_getStr(self, "pwd"), input_file_name);
__platform_printf(" compiling %s...\r\n", input_file_name); __platform_printf(" compiling %s...\r\n", input_file_name);
char* output_file_name = strsAppend(&buffs, module_name, ".py.o"); char* output_file_name = strsAppend(&buffs, module_name, ".py.o");
char* output_file_path = NULL; char* output_file_path = NULL;
output_file_path = output_file_path =
@ -587,20 +587,30 @@ int32_t __foreach_handler_linkCompiledModules(Arg* argEach, Args* context) {
return 0; return 0;
} }
void pikaMaker_linkCompiledModules(PikaMaker* self, char* lib_name) { void pikaMaker_linkCompiledModulesFullPath(PikaMaker* self, char* lib_path) {
Args context = {0}; Args context = {0};
LibObj* lib = New_LibObj(NULL); LibObj* lib = New_LibObj(NULL);
Args buffs = {0}; Args buffs = {0};
__platform_printf(" linking %s...\n", lib_name); __platform_printf(" linking %s...\n", lib_path);
args_setPtr(&context, "__lib", lib); args_setPtr(&context, "__lib", lib);
args_setPtr(&context, "__maker", self); args_setPtr(&context, "__maker", self);
args_foreach(self->list, __foreach_handler_linkCompiledModules, &context); args_foreach(self->list, __foreach_handler_linkCompiledModules, &context);
args_deinit_stack(&context); args_deinit_stack(&context);
char* pwd = obj_getStr(self, "pwd"); char* pwd = obj_getStr(self, "pwd");
char* folder_path = strsAppend(&buffs, pwd, "pikascript-api/"); char* lib_path_folder = strsCopy(&buffs, lib_path);
char* lib_file_path = strsAppend(&buffs, folder_path, lib_name); strPopLastToken(lib_path_folder, '/');
char* folder_path = strsAppend(&buffs, pwd, lib_path_folder);
folder_path = strsAppend(&buffs, folder_path, "/");
char* lib_file_path = strsAppend(&buffs, pwd, lib_path);
LibObj_saveLibraryFile(lib, lib_file_path); LibObj_saveLibraryFile(lib, lib_file_path);
Lib_loadLibraryFileToArray(lib_file_path, folder_path); Lib_loadLibraryFileToArray(lib_file_path, folder_path);
LibObj_deinit(lib); LibObj_deinit(lib);
strsDeinit(&buffs); strsDeinit(&buffs);
} }
void pikaMaker_linkCompiledModules(PikaMaker* self, char* lib_name) {
Args buffs = {0};
char* lib_file_path = strsAppend(&buffs, "pikascript-api/", lib_name);
pikaMaker_linkCompiledModulesFullPath(self, lib_file_path);
strsDeinit(&buffs);
}

View File

@ -29,6 +29,7 @@ char* pikaMaker_getFirstNocompiled(PikaMaker* self);
void pikaMaker_compileModuleWithDepends(PikaMaker* self, char* module_name); void pikaMaker_compileModuleWithDepends(PikaMaker* self, char* module_name);
void pikaMaker_linkCompiledModules(PikaMaker* self, char* lib_name); void pikaMaker_linkCompiledModules(PikaMaker* self, char* lib_name);
int LibObj_loadLibrary(LibObj* self, uint8_t* library_bytes); int LibObj_loadLibrary(LibObj* self, uint8_t* library_bytes);
void pikaMaker_linkCompiledModulesFullPath(PikaMaker* self, char* lib_path);
#define LIB_VERSION_NUMBER 1 #define LIB_VERSION_NUMBER 1
#define LIB_INFO_BLOCK_SIZE 32 #define LIB_INFO_BLOCK_SIZE 32

View File

@ -122,75 +122,68 @@ int32_t obj_deinit(PikaObj* self) {
return obj_deinit_no_del(self); return obj_deinit_no_del(self);
} }
int32_t obj_enable(PikaObj* self) { PIKA_RES obj_setInt(PikaObj* self, char* argPath, int64_t val) {
obj_setInt(self, "isEnable", 1);
return 0;
}
int32_t obj_disable(PikaObj* self) {
obj_setInt(self, "isEnable", 0);
return 0;
}
int32_t obj_setInt(PikaObj* self, char* argPath, int64_t val) {
PikaObj* obj = obj_getHostObj(self, argPath); PikaObj* obj = obj_getHostObj(self, argPath);
if (NULL == obj) { if (NULL == obj) {
/* [error] object no found */ /* [error] object no found */
return 1; return PIKA_RES_ERR_ARG_NO_FOUND;
} }
char* name = strPointToLastToken(argPath, '.'); char* name = strPointToLastToken(argPath, '.');
args_setInt(obj->list, name, val); args_setInt(obj->list, name, val);
return 0; return PIKA_RES_OK;
} }
int32_t obj_setPtr(PikaObj* self, char* argPath, void* pointer) { PIKA_RES obj_setPtr(PikaObj* self, char* argPath, void* pointer) {
PikaObj* obj = obj_getHostObj(self, argPath); PikaObj* obj = obj_getHostObj(self, argPath);
if (NULL == obj) { if (NULL == obj) {
return 1; /* [error] object no found */
return PIKA_RES_ERR_ARG_NO_FOUND;
} }
char* name = strPointToLastToken(argPath, '.'); char* name = strPointToLastToken(argPath, '.');
args_setPtr(obj->list, name, pointer); args_setPtr(obj->list, name, pointer);
return 0; return PIKA_RES_OK;
} }
int32_t obj_setRef(PikaObj* self, char* argPath, void* pointer) { PIKA_RES obj_setRef(PikaObj* self, char* argPath, void* pointer) {
PikaObj* obj = obj_getHostObj(self, argPath); PikaObj* obj = obj_getHostObj(self, argPath);
if (NULL == obj) { if (NULL == obj) {
return 1; /* [error] object no found */
return PIKA_RES_ERR_ARG_NO_FOUND;
} }
char* name = strPointToLastToken(argPath, '.'); char* name = strPointToLastToken(argPath, '.');
args_setRef(obj->list, name, pointer); args_setRef(obj->list, name, pointer);
return 0; return PIKA_RES_OK;
} }
int32_t obj_setFloat(PikaObj* self, char* argPath, double value) { PIKA_RES obj_setFloat(PikaObj* self, char* argPath, double value) {
PikaObj* obj = obj_getHostObj(self, argPath); PikaObj* obj = obj_getHostObj(self, argPath);
if (NULL == obj) { if (NULL == obj) {
return 1; /* [error] object no found */
return PIKA_RES_ERR_ARG_NO_FOUND;
} }
char* name = strPointToLastToken(argPath, '.'); char* name = strPointToLastToken(argPath, '.');
args_setFloat(obj->list, name, value); args_setFloat(obj->list, name, value);
return 0; return PIKA_RES_OK;
} }
int32_t obj_setStr(PikaObj* self, char* argPath, char* str) { PIKA_RES obj_setStr(PikaObj* self, char* argPath, char* str) {
PikaObj* obj = obj_getHostObj(self, argPath); PikaObj* obj = obj_getHostObj(self, argPath);
if (NULL == obj) { if (NULL == obj) {
return 1; return PIKA_RES_ERR_ARG_NO_FOUND;
} }
char* name = strPointToLastToken(argPath, '.'); char* name = strPointToLastToken(argPath, '.');
args_setStr(obj->list, name, str); args_setStr(obj->list, name, str);
return 0; return PIKA_RES_OK;
} }
int32_t obj_setBytes(PikaObj* self, char* argPath, uint8_t* src, size_t size) { PIKA_RES obj_setBytes(PikaObj* self, char* argPath, uint8_t* src, size_t size) {
PikaObj* obj = obj_getHostObj(self, argPath); PikaObj* obj = obj_getHostObj(self, argPath);
if (NULL == obj) { if (NULL == obj) {
return 1; return PIKA_RES_ERR_ARG_NO_FOUND;
} }
char* name = strPointToLastToken(argPath, '.'); char* name = strPointToLastToken(argPath, '.');
args_setBytes(obj->list, name, src, size); args_setBytes(obj->list, name, src, size);
return 0; return PIKA_RES_OK;
} }
int64_t obj_getInt(PikaObj* self, char* argPath) { int64_t obj_getInt(PikaObj* self, char* argPath) {
@ -204,12 +197,18 @@ int64_t obj_getInt(PikaObj* self, char* argPath) {
} }
Arg* obj_getArg(PikaObj* self, char* argPath) { Arg* obj_getArg(PikaObj* self, char* argPath) {
PikaObj* obj = obj_getHostObj(self, argPath); PIKA_BOOL isClass = PIKA_FALSE;
PikaObj* obj = obj_getHostObjWithIsClass(self, argPath, &isClass);
if (NULL == obj) { if (NULL == obj) {
return NULL; return NULL;
} }
char* argName = strPointToLastToken(argPath, '.'); char* argName = strPointToLastToken(argPath, '.');
Arg* res = args_getArg(obj->list, argName); Arg* res = args_getArg(obj->list, argName);
if (isClass) {
obj_setArg(self, "_buf", res);
res = obj_getArg(self, "_buf");
obj_deinit(obj);
}
return res; return res;
} }
@ -244,7 +243,7 @@ size_t obj_loadBytes(PikaObj* self, char* argPath, uint8_t* out_buff) {
return size_mem; return size_mem;
} }
static int32_t __obj_setArg(PikaObj* self, static PIKA_RES __obj_setArg(PikaObj* self,
char* argPath, char* argPath,
Arg* arg, Arg* arg,
uint8_t is_copy) { uint8_t is_copy) {
@ -252,7 +251,7 @@ static int32_t __obj_setArg(PikaObj* self,
PikaObj* obj = obj_getHostObj(self, argPath); PikaObj* obj = obj_getHostObj(self, argPath);
if (NULL == obj) { if (NULL == obj) {
/* object no found */ /* object no found */
return 1; return PIKA_RES_ERR_ARG_NO_FOUND;
} }
char* argName = strPointToLastToken(argPath, '.'); char* argName = strPointToLastToken(argPath, '.');
Arg* newArg; Arg* newArg;
@ -263,14 +262,14 @@ static int32_t __obj_setArg(PikaObj* self,
} }
newArg = arg_setName(newArg, argName); newArg = arg_setName(newArg, argName);
args_setArg(obj->list, newArg); args_setArg(obj->list, newArg);
return 0; return PIKA_RES_OK;
} }
int32_t obj_setArg(PikaObj* self, char* argPath, Arg* arg) { PIKA_RES obj_setArg(PikaObj* self, char* argPath, Arg* arg) {
return __obj_setArg(self, argPath, arg, 1); return __obj_setArg(self, argPath, arg, 1);
}; };
int32_t obj_setArg_noCopy(PikaObj* self, char* argPath, Arg* arg) { PIKA_RES obj_setArg_noCopy(PikaObj* self, char* argPath, Arg* arg) {
return __obj_setArg(self, argPath, arg, 0); return __obj_setArg(self, argPath, arg, 0);
} }
@ -304,42 +303,24 @@ char* obj_getStr(PikaObj* self, char* argPath) {
return res; return res;
} }
int32_t obj_load(PikaObj* self, Args* args, char* name) {
args_copyArgByName(args, name, self->list);
return 0;
}
int32_t obj_freeObj(PikaObj* self, char* objPath) {
PikaObj* obj = obj_getPtr(self, objPath);
obj_deinit(obj);
return 0;
}
char* obj_print(PikaObj* self, char* name) {
if (NULL == self) {
return NULL;
}
return args_print(self->list, name);
}
PikaObj* obj_getClassObjByNewFun(PikaObj* context, PikaObj* obj_getClassObjByNewFun(PikaObj* context,
char* name, char* name,
NewFun newClassFun) { NewFun newClassFun) {
Args* initArgs = New_args(NULL); Args* initArgs = New_args(NULL);
PikaObj* thisClass = newClassFun(initArgs); PikaObj* thisClass = newClassFun(initArgs);
obj_setPtr(thisClass, "_clsptr", (void*)newClassFun); thisClass->constructor = newClassFun;
obj_setInt(thisClass, "_refcnt", 0); thisClass->refcnt = 0;
args_deinit(initArgs); args_deinit(initArgs);
return thisClass; return thisClass;
} }
Arg* obj_getMethodArg(PikaObj* obj, char* methodPath) { Arg* _obj_getMethodArg(PikaObj* obj, char* methodPath, Arg* arg_reg) {
Arg* method = NULL; Arg* method = NULL;
char* methodName = strPointToLastToken(methodPath, '.'); char* methodName = strPointToLastToken(methodPath, '.');
method = obj_getArg(obj, methodName); method = obj_getArg(obj, methodName);
PikaObj* methodHostClass; PikaObj* methodHostClass;
if (NULL != method) { if (NULL != method) {
method = arg_copy(method); method = arg_copy_noalloc(method, arg_reg);
goto exit; goto exit;
} }
methodHostClass = obj_getClassObj(obj); methodHostClass = obj_getClassObj(obj);
@ -347,14 +328,26 @@ Arg* obj_getMethodArg(PikaObj* obj, char* methodPath) {
method = NULL; method = NULL;
goto exit; goto exit;
} }
method = arg_copy(obj_getArg(methodHostClass, methodName)); method = arg_copy_noalloc(obj_getArg(methodHostClass, methodName), arg_reg);
obj_deinit_no_del(methodHostClass); obj_deinit_no_del(methodHostClass);
exit: exit:
return method; return method;
} }
Arg* obj_getMethodArg(PikaObj* obj, char* methodPath) {
return _obj_getMethodArg(obj, methodPath, NULL);
}
Arg* obj_getMethodArg_noalloc(PikaObj* obj, char* methodPath, Arg* arg_reg) {
return _obj_getMethodArg(obj, methodPath, arg_reg);
}
NewFun obj_getClass(PikaObj* obj) {
return (NewFun)obj->constructor;
}
PikaObj* obj_getClassObj(PikaObj* obj) { PikaObj* obj_getClassObj(PikaObj* obj) {
NewFun classPtr = (NewFun)obj_getPtr(obj, "_clsptr"); NewFun classPtr = obj_getClass(obj);
if (NULL == classPtr) { if (NULL == classPtr) {
return NULL; return NULL;
} }
@ -393,15 +386,14 @@ PikaObj* newNormalObj(NewFun newObjFun) {
extern PikaObj* __pikaMain; extern PikaObj* __pikaMain;
PikaObj* newRootObj(char* name, NewFun newObjFun) { PikaObj* newRootObj(char* name, NewFun newObjFun) {
#if PIKA_POOL_ENABLE
mem_pool_init();
#endif
PikaObj* newObj = newNormalObj(newObjFun); PikaObj* newObj = newNormalObj(newObjFun);
__pikaMain = newObj; __pikaMain = newObj;
return newObj; return newObj;
} }
Arg* obj_getRefArg(PikaObj* self) {
return arg_setPtr(NULL, "", ARG_TYPE_OBJECT_NEW, self);
}
Arg* arg_newMetaObj(NewFun new_obj_fun) { Arg* arg_newMetaObj(NewFun new_obj_fun) {
Arg* arg_new = New_arg(NULL); Arg* arg_new = New_arg(NULL);
/* m means meta-object */ /* m means meta-object */
@ -411,7 +403,7 @@ Arg* arg_newMetaObj(NewFun new_obj_fun) {
Arg* arg_newDirectObj(NewFun new_obj_fun) { Arg* arg_newDirectObj(NewFun new_obj_fun) {
PikaObj* newObj = newNormalObj(new_obj_fun); PikaObj* newObj = newNormalObj(new_obj_fun);
Arg* arg_new = arg_setPtr(NULL, "", ARG_TYPE_OBJECT_NEW, newObj); Arg* arg_new = arg_newPtr(ARG_TYPE_OBJECT_NEW, newObj);
return arg_new; return arg_new;
} }
@ -442,7 +434,10 @@ exit:
return res; return res;
} }
static PikaObj* __obj_getObjDirect(PikaObj* self, char* name) { static PikaObj* __obj_getObjDirect(PikaObj* self,
char* name,
PIKA_BOOL* pIsClass) {
*pIsClass = PIKA_FALSE;
if (NULL == self) { if (NULL == self) {
return NULL; return NULL;
} }
@ -456,11 +451,27 @@ static PikaObj* __obj_getObjDirect(PikaObj* self, char* name) {
if (argType_isObject(type)) { if (argType_isObject(type)) {
return args_getPtr(self->list, name); return args_getPtr(self->list, name);
} }
/* found class */
if (type == ARG_TYPE_METHOD_NATIVE_CONSTRUCTOR ||
type == ARG_TYPE_METHOD_CONSTRUCTOR) {
*pIsClass = PIKA_TRUE;
PikaObj* method_args_obj = New_TinyObj(NULL);
Arg* cls_obj_arg = obj_runMethodArg(self, method_args_obj,
args_getArg(self->list, name));
obj_deinit(method_args_obj);
if (type == ARG_TYPE_METHOD_NATIVE_CONSTRUCTOR) {
obj_runNativeMethod(arg_getPtr(cls_obj_arg), "__init__", NULL);
}
PikaObj* res = arg_getPtr(cls_obj_arg);
arg_deinit(cls_obj_arg);
return res;
}
return NULL; return NULL;
} }
static PikaObj* __obj_getObjWithKeepDeepth(PikaObj* self, static PikaObj* __obj_getObjWithKeepDeepth(PikaObj* self,
char* objPath, char* objPath,
PIKA_BOOL* pIsClass,
int32_t keepDeepth) { int32_t keepDeepth) {
char objPath_buff[PIKA_PATH_BUFF_SIZE]; char objPath_buff[PIKA_PATH_BUFF_SIZE];
__platform_memcpy(objPath_buff, objPath, strGetSize(objPath) + 1); __platform_memcpy(objPath_buff, objPath, strGetSize(objPath) + 1);
@ -469,7 +480,7 @@ static PikaObj* __obj_getObjWithKeepDeepth(PikaObj* self,
PikaObj* obj = self; PikaObj* obj = self;
for (int32_t i = 0; i < token_num - keepDeepth; i++) { for (int32_t i = 0; i < token_num - keepDeepth; i++) {
char* token = strPopToken(token_buff, objPath_buff, '.'); char* token = strPopToken(token_buff, objPath_buff, '.');
obj = __obj_getObjDirect(obj, token); obj = __obj_getObjDirect(obj, token, pIsClass);
if (obj == NULL) { if (obj == NULL) {
goto exit; goto exit;
} }
@ -480,11 +491,19 @@ exit:
} }
PikaObj* obj_getObj(PikaObj* self, char* objPath) { PikaObj* obj_getObj(PikaObj* self, char* objPath) {
return __obj_getObjWithKeepDeepth(self, objPath, 0); PIKA_BOOL isClass = PIKA_FALSE;
return __obj_getObjWithKeepDeepth(self, objPath, &isClass, 0);
} }
PikaObj* obj_getHostObj(PikaObj* self, char* objPath) { PikaObj* obj_getHostObj(PikaObj* self, char* objPath) {
return __obj_getObjWithKeepDeepth(self, objPath, 1); PIKA_BOOL isClass = PIKA_FALSE;
return __obj_getObjWithKeepDeepth(self, objPath, &isClass, 1);
}
PikaObj* obj_getHostObjWithIsClass(PikaObj* self,
char* objPath,
PIKA_BOOL* pIsClass) {
return __obj_getObjWithKeepDeepth(self, objPath, pIsClass, 1);
} }
Method methodArg_getPtr(Arg* method_arg) { Method methodArg_getPtr(Arg* method_arg) {
@ -495,9 +514,12 @@ Method methodArg_getPtr(Arg* method_arg) {
return (Method)ptr; return (Method)ptr;
} }
char* methodArg_getTypeList(Arg* method_arg, Args* buffs) { char* methodArg_getTypeList(Arg* method_arg, char* buffs, size_t size) {
char* method_dec = strsCopy(buffs, methodArg_getDec(method_arg)); char* method_dec = strCopy(buffs, methodArg_getDec(method_arg));
return strsCut(buffs, method_dec, '(', ')'); if (strGetSize(method_dec) > size) {
return NULL;
}
return strCut(buffs, method_dec, '(', ')');
} }
Method obj_getNativeMethod(PikaObj* self, char* method_name) { Method obj_getNativeMethod(PikaObj* self, char* method_name) {
@ -521,7 +543,15 @@ ByteCodeFrame* methodArg_getBytecodeFrame(Arg* method_arg) {
char* methodArg_getDec(Arg* method_arg) { char* methodArg_getDec(Arg* method_arg) {
uint32_t size_ptr = sizeof(void*); uint32_t size_ptr = sizeof(void*);
void* info = arg_getContent(method_arg); void* info = arg_getContent(method_arg);
return (char*)((uintptr_t)info + 2 * size_ptr); return (char*)((uintptr_t)info + 3 * size_ptr);
}
PikaObj* methodArg_getDefContext(Arg* method_arg) {
uint32_t size_ptr = sizeof(void*);
void* info = arg_getContent(method_arg) + 2 * size_ptr;
PikaObj* context = NULL;
__platform_memcpy(&context, info, size_ptr);
return context;
} }
static void obj_saveMethodInfo(PikaObj* self, MethodInfo* method_info) { static void obj_saveMethodInfo(PikaObj* self, MethodInfo* method_info) {
@ -532,11 +562,17 @@ static void obj_saveMethodInfo(PikaObj* self, MethodInfo* method_info) {
uint32_t size_pars = strGetSize(pars); uint32_t size_pars = strGetSize(pars);
uintptr_t method_info_bytecode_frame = uintptr_t method_info_bytecode_frame =
(uintptr_t)method_info->bytecode_frame; (uintptr_t)method_info->bytecode_frame;
uintptr_t method_info_def_context = (uintptr_t)method_info->def_context;
/* the first arg_value */
arg = arg =
arg_setPtr(arg, method_info->name, method_info->type, method_info->ptr); arg_setPtr(arg, method_info->name, method_info->type, method_info->ptr);
/* the seconed */
arg = arg_append(arg, &(method_info_bytecode_frame), arg = arg_append(arg, &(method_info_bytecode_frame),
sizeof(method_info_bytecode_frame)); sizeof(method_info_bytecode_frame));
arg = arg_append(arg, &(method_info_def_context),
sizeof(method_info_def_context));
arg = arg_append(arg, method_info->pars, size_pars + 1); arg = arg_append(arg, method_info->pars, size_pars + 1);
args_setArg(self->list, arg); args_setArg(self->list, arg);
strsDeinit(&buffs); strsDeinit(&buffs);
} }
@ -545,6 +581,7 @@ static int32_t __class_defineMethodWithType(PikaObj* self,
char* declearation, char* declearation,
Method method_ptr, Method method_ptr,
ArgType method_type, ArgType method_type,
PikaObj* def_context,
ByteCodeFrame* bytecode_frame) { ByteCodeFrame* bytecode_frame) {
int32_t size = strGetSize(declearation); int32_t size = strGetSize(declearation);
int32_t res = 0; int32_t res = 0;
@ -567,6 +604,7 @@ static int32_t __class_defineMethodWithType(PikaObj* self,
method_info.name = method_name; method_info.name = method_name;
method_info.ptr = (void*)method_ptr; method_info.ptr = (void*)method_ptr;
method_info.type = method_type; method_info.type = method_type;
method_info.def_context = def_context;
method_info.bytecode_frame = bytecode_frame; method_info.bytecode_frame = bytecode_frame;
obj_saveMethodInfo(method_host, &method_info); obj_saveMethodInfo(method_host, &method_info);
res = 0; res = 0;
@ -582,7 +620,7 @@ int32_t class_defineConstructor(PikaObj* self,
Method methodPtr) { Method methodPtr) {
return __class_defineMethodWithType(self, declearation, methodPtr, return __class_defineMethodWithType(self, declearation, methodPtr,
ARG_TYPE_METHOD_NATIVE_CONSTRUCTOR, ARG_TYPE_METHOD_NATIVE_CONSTRUCTOR,
NULL); NULL, NULL);
} }
/* define a native method as default */ /* define a native method as default */
@ -590,35 +628,40 @@ int32_t class_defineMethod(PikaObj* self,
char* declearation, char* declearation,
Method methodPtr) { Method methodPtr) {
return __class_defineMethodWithType(self, declearation, methodPtr, return __class_defineMethodWithType(self, declearation, methodPtr,
ARG_TYPE_METHOD_NATIVE, NULL); ARG_TYPE_METHOD_NATIVE, NULL, NULL);
} }
/* define object method, object method is which startwith (self) */ /* define object method, object method is which startwith (self) */
int32_t class_defineRunTimeConstructor(PikaObj* self, int32_t class_defineRunTimeConstructor(PikaObj* self,
char* declearation, char* declearation,
Method methodPtr, Method methodPtr,
PikaObj* def_context,
ByteCodeFrame* bytecode_frame) { ByteCodeFrame* bytecode_frame) {
return __class_defineMethodWithType(self, declearation, methodPtr, return __class_defineMethodWithType(self, declearation, methodPtr,
ARG_TYPE_METHOD_CONSTRUCTOR, ARG_TYPE_METHOD_CONSTRUCTOR,
bytecode_frame); def_context, bytecode_frame);
} }
/* define object method, object method is which startwith (self) */ /* define object method, object method is which startwith (self) */
int32_t class_defineObjectMethod(PikaObj* self, int32_t class_defineObjectMethod(PikaObj* self,
char* declearation, char* declearation,
Method methodPtr, Method methodPtr,
PikaObj* def_context,
ByteCodeFrame* bytecode_frame) { ByteCodeFrame* bytecode_frame) {
return __class_defineMethodWithType(self, declearation, methodPtr, return __class_defineMethodWithType(self, declearation, methodPtr,
ARG_TYPE_METHOD_OBJECT, bytecode_frame); ARG_TYPE_METHOD_OBJECT, def_context,
bytecode_frame);
} }
/* define a static method as default */ /* define a static method as default */
int32_t class_defineStaticMethod(PikaObj* self, int32_t class_defineStaticMethod(PikaObj* self,
char* declearation, char* declearation,
Method methodPtr, Method methodPtr,
PikaObj* def_context,
ByteCodeFrame* bytecode_frame) { ByteCodeFrame* bytecode_frame) {
return __class_defineMethodWithType(self, declearation, methodPtr, return __class_defineMethodWithType(self, declearation, methodPtr,
ARG_TYPE_METHOD_STATIC, bytecode_frame); ARG_TYPE_METHOD_STATIC, def_context,
bytecode_frame);
} }
VMParameters* obj_runDirect(PikaObj* self, char* cmd) { VMParameters* obj_runDirect(PikaObj* self, char* cmd) {
@ -681,12 +724,13 @@ void obj_run(PikaObj* self, char* cmd) {
obj_runDirect(self, cmd); obj_runDirect(self, cmd);
} }
void obj_runNativeMethod(PikaObj* self, char* method_name, Args* args) { PIKA_RES obj_runNativeMethod(PikaObj* self, char* method_name, Args* args) {
Method native_method = obj_getNativeMethod(self, method_name); Method native_method = obj_getNativeMethod(self, method_name);
if (NULL == native_method) { if (NULL == native_method) {
return; return PIKA_RES_ERR_ARG_NO_FOUND;
} }
native_method(self, args); native_method(self, args);
return PIKA_RES_OK;
} }
static void __clearBuff(char* buff, int size) { static void __clearBuff(char* buff, int size) {
@ -706,7 +750,8 @@ static void __obj_runCharBeforeRun(PikaObj* self) {
enum shell_state obj_runChar(PikaObj* self, char inputChar) { enum shell_state obj_runChar(PikaObj* self, char inputChar) {
struct shell_config* cfg = args_getStruct(self->list, "__shcfg"); struct shell_config* cfg = args_getStruct(self->list, "__shcfg");
__obj_shellLineHandler_t __lineHandler_fun = obj_getPtr(self, "__shhdl"); __obj_shellLineHandler_t __lineHandler_fun =
(__obj_shellLineHandler_t)obj_getPtr(self, "__shhdl");
char* rxBuff = (char*)obj_getBytes(self, "__shbuf"); char* rxBuff = (char*)obj_getBytes(self, "__shbuf");
char* input_line = NULL; char* input_line = NULL;
int is_in_block = obj_getInt(self, "__shinb"); int is_in_block = obj_getInt(self, "__shinb");
@ -841,10 +886,6 @@ int32_t obj_getErrorCode(PikaObj* self) {
return obj_getInt(self, "__errCode"); return obj_getInt(self, "__errCode");
} }
void args_setErrorCode(Args* args, int32_t errCode) {
args_setInt(args, "__errCode", errCode);
}
int32_t args_getErrorCode(Args* args) { int32_t args_getErrorCode(Args* args) {
if (!args_isArgExist(args, "__errCode")) { if (!args_isArgExist(args, "__errCode")) {
return 0; return 0;
@ -860,10 +901,6 @@ char* obj_getSysOut(PikaObj* self) {
return obj_getStr(self, "__sysOut"); return obj_getStr(self, "__sysOut");
} }
char* args_getSysOut(Args* args) {
return args_getStr(args, "__sysOut");
}
void args_setSysOut(Args* args, char* str) { void args_setSysOut(Args* args, char* str) {
// args_setStr(args, "__sysOut", str); // args_setStr(args, "__sysOut", str);
if (NULL == str) { if (NULL == str) {
@ -875,15 +912,6 @@ void args_setSysOut(Args* args, char* str) {
__platform_printf("%s\r\n", str); __platform_printf("%s\r\n", str);
} }
void obj_sysPrintf(PikaObj* self, char* fmt, ...) {
va_list args;
va_start(args, fmt);
char sysOut[128] = {0};
__platform_vsprintf(sysOut, fmt, args);
obj_setSysOut(self, sysOut);
va_end(args);
}
void method_returnBytes(Args* args, uint8_t* val) { void method_returnBytes(Args* args, uint8_t* val) {
args_setBytes(args, "return", val, PIKA_BYTES_DEFAULT_SIZE); args_setBytes(args, "return", val, PIKA_BYTES_DEFAULT_SIZE);
} }
@ -932,30 +960,16 @@ PikaObj* New_PikaObj(void) {
PikaObj* self = pikaMalloc(sizeof(PikaObj)); PikaObj* self = pikaMalloc(sizeof(PikaObj));
/* List */ /* List */
self->list = New_args(NULL); self->list = New_args(NULL);
self->refcnt = 0;
self->constructor = NULL;
return self; return self;
} }
void obj_refcntInc(PikaObj* self) {
obj_setInt(self, "_refcnt", obj_getInt(self, "_refcnt") + 1);
}
void obj_refcntDec(PikaObj* self) {
obj_setInt(self, "_refcnt", obj_getInt(self, "_refcnt") - 1);
}
int obj_refcntNow(PikaObj* self) {
return obj_getInt(self, "_refcnt");
}
Arg* arg_setRef(Arg* self, char* name, PikaObj* obj) { Arg* arg_setRef(Arg* self, char* name, PikaObj* obj) {
obj_refcntInc(obj); obj_refcntInc(obj);
return arg_setPtr(self, name, ARG_TYPE_OBJECT, obj); return arg_setPtr(self, name, ARG_TYPE_OBJECT, obj);
} }
Arg* arg_setWeakRef(Arg* self, char* name, PikaObj* obj) {
return arg_setPtr(self, name, ARG_TYPE_OBJECT, obj);
}
int32_t obj_newDirectObj(PikaObj* self, char* objName, NewFun newFunPtr) { int32_t obj_newDirectObj(PikaObj* self, char* objName, NewFun newFunPtr) {
Arg* new_obj = arg_newDirectObj(newFunPtr); Arg* new_obj = arg_newDirectObj(newFunPtr);
new_obj = arg_setName(new_obj, objName); new_obj = arg_setName(new_obj, objName);
@ -991,11 +1005,19 @@ PikaObj* obj_importModuleWithByteCode(PikaObj* self,
PikaObj* obj_importModuleWithByteCodeFrame(PikaObj* self, PikaObj* obj_importModuleWithByteCodeFrame(PikaObj* self,
char* name, char* name,
ByteCodeFrame* byteCode_frame) { ByteCodeFrame* byteCode_frame) {
obj_newDirectObj(self, name, New_TinyObj); PikaObj* New_PikaStdLib_SysObj(Args * args);
obj_newDirectObj(self, name, New_PikaStdLib_SysObj);
pikaVM_runByteCodeFrame(obj_getObj(self, name), byteCode_frame); pikaVM_runByteCodeFrame(obj_getObj(self, name), byteCode_frame);
return self; return self;
} }
PikaObj* Obj_linkLibraryFile(PikaObj* self, char* input_file_name) {
obj_newMetaObj(self, "__lib", New_LibObj);
LibObj* lib = obj_getObj(self, "__lib");
LibObj_loadLibraryFile(lib, input_file_name);
return self;
}
PikaObj* obj_linkLibrary(PikaObj* self, uint8_t* library_bytes) { PikaObj* obj_linkLibrary(PikaObj* self, uint8_t* library_bytes) {
obj_newMetaObj(self, "__lib", New_LibObj); obj_newMetaObj(self, "__lib", New_LibObj);
LibObj* lib = obj_getObj(self, "__lib"); LibObj* lib = obj_getObj(self, "__lib");
@ -1065,5 +1087,82 @@ char* obj_toStr(PikaObj* self) {
char* str_res = obj_getStr(self, "__res"); char* str_res = obj_getStr(self, "__res");
return str_res; return str_res;
} }
return NULL;
/* normal object */
Args buffs = {0};
char* str_res =
strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, "<object at %p>", self);
obj_setStr(self, "__res", str_res);
strsDeinit(&buffs);
return obj_getStr(self, "__res");
}
void pks_eventLicener_registEvent(PikaEventListener* self,
uint32_t eventId,
PikaObj* eventHandleObj) {
Args buffs = {0};
char* event_name =
strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, "%ld", eventId);
obj_newDirectObj(self, event_name, New_TinyObj);
PikaObj* event_item = obj_getObj(self, event_name);
obj_setRef(event_item, "eventHandleObj", eventHandleObj);
strsDeinit(&buffs);
}
PikaObj* pks_eventLisener_getEventHandleObj(PikaEventListener* self,
uint32_t eventId) {
Args buffs = {0};
char* event_name =
strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, "%ld", eventId);
PikaObj* event_item = obj_getObj(self, event_name);
PikaObj* eventHandleObj = obj_getPtr(event_item, "eventHandleObj");
strsDeinit(&buffs);
return eventHandleObj;
}
void pks_eventLisener_init(PikaEventListener** p_self) {
*p_self = newNormalObj(New_TinyObj);
}
void pks_eventLisener_deinit(PikaEventListener** p_self) {
if (NULL != *p_self) {
obj_deinit(*p_self);
*p_self = NULL;
}
}
void pks_eventLisener_sendSignal(PikaEventListener* self,
uint32_t eventId,
int eventSignal) {
PikaObj* eventHandleObj = pks_eventLisener_getEventHandleObj(self, eventId);
if (NULL == eventHandleObj) {
__platform_printf(
"Error: can not find event handler by id: [0x%02x]\r\n", eventId);
return;
}
obj_setInt(eventHandleObj, "eventSignal", eventSignal);
/* clang-format off */
PIKA_PYTHON(
eventCallBack(eventSignal)
)
/* clang-format on */
const uint8_t bytes[] = {
0x08, 0x00, /* instruct array size */
0x10, 0x81, 0x01, 0x00, 0x00, 0x02, 0x0d, 0x00, /* instruct array */
0x1b, 0x00, /* const pool size */
0x00, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67,
0x6e, 0x61, 0x6c, 0x00, 0x65, 0x76, 0x65, 0x6e, 0x74,
0x43, 0x61, 0x6c, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x00, /* const pool */
};
pikaVM_runByteCode(eventHandleObj, (uint8_t*)bytes);
}
/* print major version info */
void pks_printVersion(void) {
__platform_printf("pikascript-core==v%d.%d.%d (%s)\r\n", PIKA_VERSION_MAJOR,
PIKA_VERSION_MINOR, PIKA_VERSION_MICRO, PIKA_EDIT_TIME);
}
void* obj_getStruct(PikaObj* self, char* name) {
return args_getStruct(self->list, name);
} }

View File

@ -31,6 +31,7 @@
#include "dataArgs.h" #include "dataArgs.h"
#include "dataLink.h" #include "dataLink.h"
#include "dataMemory.h" #include "dataMemory.h"
#include "dataStrs.h"
typedef struct InstructUnit InstructUnit; typedef struct InstructUnit InstructUnit;
struct InstructUnit { struct InstructUnit {
@ -68,6 +69,8 @@ struct ByteCodeFrame {
typedef struct PikaObj PikaObj; typedef struct PikaObj PikaObj;
struct PikaObj { struct PikaObj {
Args* list; Args* list;
uint8_t refcnt;
void* constructor;
}; };
typedef PikaObj* (*NewFun)(Args* args); typedef PikaObj* (*NewFun)(Args* args);
@ -81,6 +84,7 @@ struct MethodInfo {
char* dec; char* dec;
char* ptr; char* ptr;
char* pars; char* pars;
PikaObj* def_context;
ArgType type; ArgType type;
ByteCodeFrame* bytecode_frame; ByteCodeFrame* bytecode_frame;
}; };
@ -96,14 +100,14 @@ int32_t obj_enable(PikaObj* self);
int32_t obj_disable(PikaObj* self); int32_t obj_disable(PikaObj* self);
// arg type operations // arg type operations
int32_t obj_setInt(PikaObj* self, char* argPath, int64_t val); PIKA_RES obj_setInt(PikaObj* self, char* argPath, int64_t val);
int32_t obj_setRef(PikaObj* self, char* argPath, void* pointer); PIKA_RES obj_setRef(PikaObj* self, char* argPath, void* pointer);
int32_t obj_setPtr(PikaObj* self, char* argPath, void* pointer); PIKA_RES obj_setPtr(PikaObj* self, char* argPath, void* pointer);
int32_t obj_setFloat(PikaObj* self, char* argPath, double value); PIKA_RES obj_setFloat(PikaObj* self, char* argPath, double value);
int32_t obj_setStr(PikaObj* self, char* argPath, char* str); PIKA_RES obj_setStr(PikaObj* self, char* argPath, char* str);
int32_t obj_setArg(PikaObj* self, char* argPath, Arg* arg); PIKA_RES obj_setArg(PikaObj* self, char* argPath, Arg* arg);
int32_t obj_setArg_noCopy(PikaObj* self, char* argPath, Arg* arg); PIKA_RES obj_setArg_noCopy(PikaObj* self, char* argPath, Arg* arg);
int32_t obj_setBytes(PikaObj* self, char* argPath, uint8_t* src, size_t size); PIKA_RES obj_setBytes(PikaObj* self, char* argPath, uint8_t* src, size_t size);
void* obj_getPtr(PikaObj* self, char* argPath); void* obj_getPtr(PikaObj* self, char* argPath);
double obj_getFloat(PikaObj* self, char* argPath); double obj_getFloat(PikaObj* self, char* argPath);
@ -123,6 +127,9 @@ int32_t obj_load(PikaObj* self, Args* args, char* name);
int32_t obj_addOther(PikaObj* self, char* subObjectName, void* new_projcetFun); int32_t obj_addOther(PikaObj* self, char* subObjectName, void* new_projcetFun);
PikaObj* obj_getObj(PikaObj* self, char* objPath); PikaObj* obj_getObj(PikaObj* self, char* objPath);
PikaObj* obj_getHostObj(PikaObj* self, char* objPath); PikaObj* obj_getHostObj(PikaObj* self, char* objPath);
PikaObj* obj_getHostObjWithIsClass(PikaObj* self,
char* objPath,
PIKA_BOOL* pIsClass);
// subProcess // subProcess
int32_t obj_freeObj(PikaObj* self, char* subObjectName); int32_t obj_freeObj(PikaObj* self, char* subObjectName);
@ -133,11 +140,13 @@ int32_t class_defineMethod(PikaObj* self, char* declearation, Method methodPtr);
int32_t class_defineObjectMethod(PikaObj* self, int32_t class_defineObjectMethod(PikaObj* self,
char* declearation, char* declearation,
Method methodPtr, Method methodPtr,
PikaObj* def_context,
ByteCodeFrame* bytecode_frame); ByteCodeFrame* bytecode_frame);
int32_t class_defineStaticMethod(PikaObj* self, int32_t class_defineStaticMethod(PikaObj* self,
char* declearation, char* declearation,
Method methodPtr, Method methodPtr,
PikaObj* def_context,
ByteCodeFrame* bytecode_frame); ByteCodeFrame* bytecode_frame);
int32_t class_defineConstructor(PikaObj* self, int32_t class_defineConstructor(PikaObj* self,
@ -147,6 +156,7 @@ int32_t class_defineConstructor(PikaObj* self,
int32_t class_defineRunTimeConstructor(PikaObj* self, int32_t class_defineRunTimeConstructor(PikaObj* self,
char* declearation, char* declearation,
Method methodPtr, Method methodPtr,
PikaObj* def_context,
ByteCodeFrame* bytecode_frame); ByteCodeFrame* bytecode_frame);
int32_t obj_removeArg(PikaObj* self, char* argPath); int32_t obj_removeArg(PikaObj* self, char* argPath);
@ -155,6 +165,7 @@ PikaObj* obj_getClassObjByNewFun(PikaObj* self, char* name, NewFun newClassFun);
PikaObj* newRootObj(char* name, NewFun newObjFun); PikaObj* newRootObj(char* name, NewFun newObjFun);
PikaObj* obj_getClassObj(PikaObj* obj); PikaObj* obj_getClassObj(PikaObj* obj);
Arg* obj_getMethodArg(PikaObj* obj, char* methodPath); Arg* obj_getMethodArg(PikaObj* obj, char* methodPath);
Arg* obj_getMethodArg_noalloc(PikaObj* obj, char* methodPath, Arg* arg_reg);
void obj_setErrorCode(PikaObj* self, int32_t errCode); void obj_setErrorCode(PikaObj* self, int32_t errCode);
int32_t obj_getErrorCode(PikaObj* self); int32_t obj_getErrorCode(PikaObj* self);
@ -180,7 +191,7 @@ double method_getFloat(Args* args, char* argName);
char* method_getStr(Args* args, char* argName); char* method_getStr(Args* args, char* argName);
void method_returnArg(Args* args, Arg* arg); void method_returnArg(Args* args, Arg* arg);
char* methodArg_getDec(Arg* method_arg); char* methodArg_getDec(Arg* method_arg);
char* methodArg_getTypeList(Arg* method_arg, Args* buffs); char* methodArg_getTypeList(Arg* method_arg, char* buffs, size_t size);
ByteCodeFrame* methodArg_getBytecodeFrame(Arg* method_arg); ByteCodeFrame* methodArg_getBytecodeFrame(Arg* method_arg);
Method methodArg_getPtr(Arg* method_arg); Method methodArg_getPtr(Arg* method_arg);
@ -214,16 +225,16 @@ void obj_shellLineProcess(PikaObj* self,
*/ */
int pikaCompile(char* output_file_name, char* py_lines); int pikaCompile(char* output_file_name, char* py_lines);
Method obj_getNativeMethod(PikaObj* self, char* method_name); Method obj_getNativeMethod(PikaObj* self, char* method_name);
void obj_runNativeMethod(PikaObj* self, char* method_name, Args* args); PIKA_RES obj_runNativeMethod(PikaObj* self, char* method_name, Args* args);
Arg* obj_newObjInPackage(NewFun newObjFun); Arg* obj_newObjInPackage(NewFun newObjFun);
void obj_refcntInc(PikaObj* self);
void obj_refcntDec(PikaObj* self);
int obj_refcntNow(PikaObj* self);
PikaObj* newNormalObj(NewFun newObjFun); PikaObj* newNormalObj(NewFun newObjFun);
Arg* arg_setRef(Arg* self, char* name, PikaObj* obj); Arg* arg_setRef(Arg* self, char* name, PikaObj* obj);
Arg* arg_setWeakRef(Arg* self, char* name, PikaObj* obj); Arg* arg_setWeakRef(Arg* self, char* name, PikaObj* obj);
#define arg_newRef(obj) arg_setRef(NULL, "", (obj))
#define arg_newWeakRef(obj) arg_setWeakRef(NULL, "", (obj))
PikaObj* obj_importModuleWithByteCodeFrame(PikaObj* self, PikaObj* obj_importModuleWithByteCodeFrame(PikaObj* self,
char* name, char* name,
ByteCodeFrame* bytecode_frame); ByteCodeFrame* bytecode_frame);
@ -252,4 +263,32 @@ enum shell_state obj_runChar(PikaObj* self, char inputChar);
#define PIKA_PYTHON(x) #define PIKA_PYTHON(x)
#define PIKA_PYTHON_END #define PIKA_PYTHON_END
typedef PikaObj PikaEventListener;
void pks_eventLisener_sendSignal(PikaEventListener* self,
uint32_t eventId,
int eventSignal);
void pks_eventLicener_registEvent(PikaEventListener* self,
uint32_t eventId,
PikaObj* eventHandleObj);
void pks_eventLisener_init(PikaEventListener** p_self);
void pks_eventLisener_deinit(PikaEventListener** p_self);
PikaObj* methodArg_getDefContext(Arg* method_arg);
PikaObj* Obj_linkLibraryFile(PikaObj* self, char* input_file_name);
NewFun obj_getClass(PikaObj* obj);
void pks_printVersion(void);
void* obj_getStruct(PikaObj* self, char* name);
PikaObj* pks_eventLisener_getEventHandleObj(PikaEventListener* self,
uint32_t eventId);
#define obj_refcntDec(self) (((self)->refcnt--))
#define obj_refcntInc(self) (((self)->refcnt)++)
#define obj_refcntNow(self) ((self)->refcnt)
#define obj_setStruct(PikaObj_p_self, char_p_name, struct_) \
args_setStruct(((PikaObj_p_self)->list), char_p_name, struct_)
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -46,9 +46,12 @@ enum StmtType {
STMT_bytes, STMT_bytes,
STMT_number, STMT_number,
STMT_method, STMT_method,
STMT_chain,
STMT_operator, STMT_operator,
STMT_import, STMT_import,
STMT_list, STMT_list,
STMT_slice,
STMT_dict,
STMT_none, STMT_none,
}; };
@ -60,6 +63,12 @@ struct Asmer {
char* line_pointer; char* line_pointer;
}; };
typedef struct SyntaxItem {
char* astNodeName;
char* asmCode;
PIKA_BOOL isUseNodeValue;
} SyntaxItem;
typedef struct LexToken LexToken; typedef struct LexToken LexToken;
struct LexToken { struct LexToken {
char* token; char* token;
@ -78,6 +87,7 @@ struct ParserState {
Arg* last_token; Arg* last_token;
Args* iter_buffs; Args* iter_buffs;
Args* buffs_p; Args* buffs_p;
PIKA_RES result;
}; };
char* Parser_multiLineToAsm(Args* outBuffs, char* multiLine); char* Parser_multiLineToAsm(Args* outBuffs, char* multiLine);
@ -92,7 +102,7 @@ char* Parser_parsePyLines(Args* outBuffs,
char* py_lines); char* py_lines);
#define ParserState_forEach(parseState) \ #define ParserState_forEach(parseState) \
ParserState_beforeIter(&parseState); \ ParserState_beforeIter(&parseState); \
for (int i = 0; i < parseState.length; i++) for (int __i = 0; __i < parseState.length; __i++)
#define ParserState_forEachTokenExistPs(parseState, tokens) \ #define ParserState_forEachTokenExistPs(parseState, tokens) \
/* init parserStage */ \ /* init parserStage */ \
@ -101,9 +111,10 @@ char* Parser_parsePyLines(Args* outBuffs,
ParserState_forEach(parseState) ParserState_forEach(parseState)
#define ParserState_forEachToken(parseState, tokens) \ #define ParserState_forEachToken(parseState, tokens) \
struct ParserState parseState; \ struct ParserState parseState; \
ParserState_forEachTokenExistPs(parseState, tokens) ParserState_forEachTokenExistPs(parseState, tokens)
uint16_t Tokens_getSize(char* tokens); uint16_t Tokens_getSize(char* tokens);
char* Parser_fileToAsm(Args* outBuffs, char* filename);
#endif #endif

View File

@ -101,6 +101,7 @@ PIKA_WEAK void __platform_wait(void) {
while (1) { while (1) {
}; };
} }
PIKA_WEAK void* __platform_memset(void* mem, int ch, size_t size) { PIKA_WEAK void* __platform_memset(void* mem, int ch, size_t size) {
return memset(mem, ch, size); return memset(mem, ch, size);
} }
@ -119,6 +120,7 @@ PIKA_WEAK char __platform_getchar(void) {
#endif #endif
} }
/* fopen */
PIKA_WEAK FILE* __platform_fopen(const char* filename, const char* modes) { PIKA_WEAK FILE* __platform_fopen(const char* filename, const char* modes) {
#if defined(__linux) || defined(_WIN32) #if defined(__linux) || defined(_WIN32)
return fopen(filename, modes); return fopen(filename, modes);
@ -129,6 +131,7 @@ PIKA_WEAK FILE* __platform_fopen(const char* filename, const char* modes) {
#endif #endif
} }
/* fclose */
PIKA_WEAK int __platform_fclose(FILE* stream) { PIKA_WEAK int __platform_fclose(FILE* stream) {
#if defined(__linux) || defined(_WIN32) #if defined(__linux) || defined(_WIN32)
return fclose(stream); return fclose(stream);
@ -139,6 +142,7 @@ PIKA_WEAK int __platform_fclose(FILE* stream) {
#endif #endif
} }
/* fwrite */
PIKA_WEAK size_t __platform_fwrite(const void* ptr, PIKA_WEAK size_t __platform_fwrite(const void* ptr,
size_t size, size_t size,
size_t n, size_t n,
@ -152,6 +156,7 @@ PIKA_WEAK size_t __platform_fwrite(const void* ptr,
#endif #endif
} }
/* fread */
PIKA_WEAK size_t __platform_fread(void* ptr, PIKA_WEAK size_t __platform_fread(void* ptr,
size_t size, size_t size,
size_t n, size_t n,
@ -164,3 +169,25 @@ PIKA_WEAK size_t __platform_fread(void* ptr,
} }
#endif #endif
} }
/* fseek */
PIKA_WEAK int __platform_fseek(FILE* stream, long offset, int whence) {
#if defined(__linux) || defined(_WIN32)
return fseek(stream, offset, whence);
#else
__platform_printf("[error]: __platform_fseek need implementation!\r\n");
while (1) {
}
#endif
}
/* ftell */
PIKA_WEAK long __platform_ftell(FILE* stream) {
#if defined(__linux) || defined(_WIN32)
return ftell(stream);
#else
__platform_printf("[error]: __platform_ftell need implementation!\r\n");
while (1) {
}
#endif
}

View File

@ -36,6 +36,18 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
/* clang-format off */
#if PIKA_ASSERT_ENABLE
#define pika_assert(expr) \
if(!(expr)) { \
__platform_printf("Assertion failed: %s\nfile: %s:%d\n", #expr, __FILE__, __LINE__); \
abort(); \
}
#else
#define pika_assert(...)
#endif
/* clang-format on */
/* Compiler */ /* Compiler */
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 5000000) /* ARM Compiler \ #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 5000000) /* ARM Compiler \
*/ */
@ -65,23 +77,24 @@
#define __platform_printf(...) rt_kprintf(__VA_ARGS__) #define __platform_printf(...) rt_kprintf(__VA_ARGS__)
#endif #endif
/* clang-format off */
typedef enum { typedef enum {
PIKA_RES_ERR_ARG_NO_FOUND = -12, PIKA_RES_OK = 0,
PIKA_RES_ERR_UNKNOWN_INSTRUCTION = -11, PIKA_RES_ERR_RUNTIME_ERROR,
PIKA_RES_ERR_OUT_OF_RANGE = -10, PIKA_RES_ERR_ARG_NO_FOUND,
PIKA_RES_ERR_IO_ERROR = -9, PIKA_RES_ERR_UNKNOWN_INSTRUCTION,
PIKA_RES_ERR_INSUFFICIENT_RESOURCE = -8, PIKA_RES_ERR_OUT_OF_RANGE,
PIKA_RES_ERR_INVALID_PARAM = -7, PIKA_RES_ERR_IO_ERROR,
PIKA_RES_ERR_INVALID_PTR = -6, PIKA_RES_ERR_INSUFFICIENT_RESOURCE,
PIKA_RES_ERR_UNALIGNED_PTR = -5, PIKA_RES_ERR_INVALID_PARAM,
PIKA_RES_ERR_INVALID_VERSION_NUMBER = -4, PIKA_RES_ERR_INVALID_PTR,
PIKA_RES_ERR_ILLEGAL_MAGIC_CODE = -3, PIKA_RES_ERR_UNALIGNED_PTR,
PIKA_RES_ERR_OPERATION_FAILED = -2, PIKA_RES_ERR_INVALID_VERSION_NUMBER,
PIKA_RES_ERR_UNKNOWN = -1, PIKA_RES_ERR_ILLEGAL_MAGIC_CODE,
PIKA_RES_OK = 0, PIKA_RES_ERR_OPERATION_FAILED,
PIKA_RES_ERR_UNKNOWN,
PIKA_RES_ERR_SYNTAX_ERROR,
PIKA_RES_ERR_IO,
} PIKA_RES; } PIKA_RES;
/* clang-format on*/
/* clang-format off */ /* clang-format off */
@ -139,6 +152,8 @@ FILE* __platform_fopen(const char* filename, const char* modes);
int __platform_fclose(FILE* stream); int __platform_fclose(FILE* stream);
size_t __platform_fwrite(const void* ptr, size_t size, size_t n, FILE* stream); size_t __platform_fwrite(const void* ptr, size_t size, size_t n, FILE* stream);
size_t __platform_fread(void* ptr, size_t size, size_t n, FILE* stream); size_t __platform_fread(void* ptr, size_t size, size_t n, FILE* stream);
int __platform_fseek(FILE* stream, long offset, int whence);
long __platform_ftell(FILE* stream);
/* error */ /* error */
void __platform_error_handle(void); void __platform_error_handle(void);

File diff suppressed because it is too large Load Diff

View File

@ -38,6 +38,32 @@ enum Instruct {
__INSTRCUTION_CNT, __INSTRCUTION_CNT,
}; };
typedef enum {
VM_JMP_EXIT = -999,
VM_JMP_CONTINUE = -997,
VM_JMP_BREAK = -998,
VM_JMP_RAISE = -996,
} VM_JMP;
typedef enum { VM_PC_EXIT = -99999 } VM_PC;
typedef enum {
TRY_STATE_NONE = 0,
TRY_STATE_TOP,
TRY_STATE_INNER,
} TRY_STATE;
typedef enum {
TRY_RESULT_NONE = 0,
TRY_RESULT_RAISE,
} TRY_RESULT;
typedef struct TryInfo TryInfo;
struct TryInfo {
TRY_STATE try_state;
TRY_RESULT try_result;
};
typedef struct VMState VMState; typedef struct VMState VMState;
struct VMState { struct VMState {
VMParameters* locals; VMParameters* locals;
@ -46,10 +72,16 @@ struct VMState {
int32_t jmp; int32_t jmp;
int32_t pc; int32_t pc;
ByteCodeFrame* bytecode_frame; ByteCodeFrame* bytecode_frame;
uint8_t loop_deepth;
uint8_t error_code; uint8_t error_code;
uint8_t line_error_code; uint8_t line_error_code;
uint8_t try_error_code;
PikaObj* lreg[PIKA_REGIST_SIZE];
PIKA_BOOL ireg[PIKA_REGIST_SIZE];
TryInfo* try_info;
}; };
VMParameters* pikaVM_run(PikaObj* self, char* pyLine); VMParameters* pikaVM_run(PikaObj* self, char* pyLine);
VMParameters* pikaVM_runAsm(PikaObj* self, char* pikaAsm); VMParameters* pikaVM_runAsm(PikaObj* self, char* pikaAsm);
VMParameters* pikaVM_runByteCodeFrame(PikaObj* self, VMParameters* pikaVM_runByteCodeFrame(PikaObj* self,
@ -95,11 +127,15 @@ enum Instruct pikaVM_getInstructFromAsm(char* line);
void constPool_init(ConstPool* self); void constPool_init(ConstPool* self);
void constPool_deinit(ConstPool* self); void constPool_deinit(ConstPool* self);
void constPool_append(ConstPool* self, char* content); void constPool_append(ConstPool* self, char* content);
#define constPool_getStart(self) ((self)->content_start)
#define constPool_getLastOffset(self) ((self)->size)
#define constPool_getByOffset(self, offset) \
(char*)((uintptr_t)constPool_getStart((self)) + (uintptr_t)(offset))
char* constPool_getNow(ConstPool* self); char* constPool_getNow(ConstPool* self);
char* constPool_getNext(ConstPool* self); char* constPool_getNext(ConstPool* self);
char* constPool_getByIndex(ConstPool* self, uint16_t index); char* constPool_getByIndex(ConstPool* self, uint16_t index);
char* constPool_getByOffset(ConstPool* self, uint16_t offset);
uint16_t constPool_getLastOffset(ConstPool* self);
void constPool_print(ConstPool* self); void constPool_print(ConstPool* self);
void byteCodeFrame_init(ByteCodeFrame* bf); void byteCodeFrame_init(ByteCodeFrame* bf);
@ -118,6 +154,7 @@ InstructUnit* instructArray_getByOffset(InstructArray* self, int32_t offset);
#define instructUnit_getSize(InstructUnit_p_self) ((size_t)sizeof(InstructUnit)) #define instructUnit_getSize(InstructUnit_p_self) ((size_t)sizeof(InstructUnit))
#define instructArray_getSize(InsturctArry_p_self) \ #define instructArray_getSize(InsturctArry_p_self) \
((size_t)(InsturctArry_p_self)->size) ((size_t)(InsturctArry_p_self)->size)
#define instructArray_getStart(InsturctArry_p_self) ((self)->content_start)
uint16_t constPool_getOffsetByData(ConstPool* self, char* data); uint16_t constPool_getOffsetByData(ConstPool* self, char* data);
void instructArray_printWithConst(InstructArray* self, ConstPool* const_pool); void instructArray_printWithConst(InstructArray* self, ConstPool* const_pool);
@ -131,6 +168,14 @@ void byteCodeFrame_init(ByteCodeFrame* self);
VMParameters* pikaVM_runByteCode(PikaObj* self, uint8_t* bytecode); VMParameters* pikaVM_runByteCode(PikaObj* self, uint8_t* bytecode);
InstructUnit* instructArray_getNow(InstructArray* self); InstructUnit* instructArray_getNow(InstructArray* self);
InstructUnit* instructArray_getNext(InstructArray* self); InstructUnit* instructArray_getNext(InstructArray* self);
VMParameters* pikaVM_runFile(PikaObj* self, char* filename); VMParameters* pikaVM_runSingleFile(PikaObj* self, char* filename);
Arg* obj_runMethodArg(PikaObj* self, PikaObj* method_args_obj, Arg* method_arg);
PikaObj* pikaVM_runFile(PikaObj* self, char* file_name);
Arg* __vm_slice(PikaObj* self, Arg* end, Arg* obj, Arg* start, int step);
Arg* __vm_get(PikaObj* self, Arg* key, Arg* obj);
void __vm_List_append(PikaObj* self, Arg* arg);
void __vm_List___init__(PikaObj* self);
void __vm_Dict_set(PikaObj* self, Arg* arg, char* key);
void __vm_Dict___init__(PikaObj* self);
#endif #endif

View File

@ -0,0 +1,5 @@
#define PIKA_VERSION_MAJOR 1
#define PIKA_VERSION_MINOR 10
#define PIKA_VERSION_MICRO 0
#define PIKA_EDIT_TIME "2022/08/05 15:00:46"

View File

@ -37,7 +37,7 @@
#if defined(__INS_COMPIRE) #if defined(__INS_COMPIRE)
#define def_ins(__INS_NAME) \ #define def_ins(__INS_NAME) \
if (0 == strncmp(line + 2, "" #__INS_NAME "", 3)) { \ if (0 == strncmp(ins_str, "" #__INS_NAME "", 3)) { \
return __INS_NAME; \ return __INS_NAME; \
} }
#endif #endif

View File

@ -30,26 +30,63 @@
//! just append ins to the end, insert ins would brake the pre-compiled //! just append ins to the end, insert ins would brake the pre-compiled
//! bytecode. //! bytecode.
/* none */
def_ins(NON) def_ins(NON)
/* get referance */
def_ins(REF) def_ins(REF)
/* run function */
def_ins(RUN) def_ins(RUN)
/* string */
def_ins(STR) def_ins(STR)
/* output */
def_ins(OUT) def_ins(OUT)
/* number */
def_ins(NUM) def_ins(NUM)
/* jump */
def_ins(JMP) def_ins(JMP)
/* jump qual zero */
def_ins(JEZ) def_ins(JEZ)
/* operator */
def_ins(OPT) def_ins(OPT)
/* define */
def_ins(DEF) def_ins(DEF)
/* return */
def_ins(RET) def_ins(RET)
/* not equal */
def_ins(NEL) def_ins(NEL)
/* delete */
def_ins(DEL) def_ins(DEL)
/* exist */
def_ins(EST) def_ins(EST)
/* break */
def_ins(BRK) def_ins(BRK)
/* continue */
def_ins(CTN) def_ins(CTN)
/* global */
def_ins(GLB) def_ins(GLB)
/* run as */
def_ins(RAS) def_ins(RAS)
/* new */
def_ins(NEW) def_ins(NEW)
/* class */
def_ins(CLS) def_ins(CLS)
/* bytes */
def_ins(BYT) def_ins(BYT)
/* list */
def_ins(LST) def_ins(LST)
/* import */
def_ins(IMP) def_ins(IMP)
/* try */
def_ins(TRY)
/* not try */
def_ins(NTR)
/* raise */
def_ins(RIS)
/* get error code */
def_ins(GER)
/* set error code */
def_ins(SER)
/* dict */
def_ins(DCT)
/* slice */
def_ins(SLC)

View File

@ -32,7 +32,7 @@
#include "dataString.h" #include "dataString.h"
#include "stdlib.h" #include "stdlib.h"
uint16_t arg_getTotleSize(Arg* self) { uint32_t arg_getTotleSize(Arg* self) {
return arg_totleSize(self); return arg_totleSize(self);
} }
@ -53,13 +53,15 @@ static Arg* arg_init_hash(Hash nameHash,
uint32_t size, uint32_t size,
Arg* next) { Arg* next) {
Arg* self = (Arg*)pikaMalloc(sizeof(Arg) + size); Arg* self = (Arg*)pikaMalloc(sizeof(Arg) + size);
self->next = next; arg_setNext(self, next);
self->size = size; self->size = size;
self->name_hash = nameHash; self->name_hash = nameHash;
self->type = type; self->type = type;
__platform_memset(self->content, 0, aline_by(size, sizeof(uint32_t))); self->serialized = PIKA_TRUE;
__platform_memset(arg_getContent(self), 0,
aline_by(size, sizeof(uint32_t)));
if (NULL != content) { if (NULL != content) {
__platform_memcpy(self->content, content, size); __platform_memcpy(arg_getContent(self), content, size);
} }
return self; return self;
@ -68,33 +70,41 @@ static Arg* arg_init_hash(Hash nameHash,
static Arg* arg_init(char* name, static Arg* arg_init(char* name,
ArgType type, ArgType type,
uint8_t* content, uint8_t* content,
uint16_t size, uint32_t size,
Arg* next) { Arg* next) {
Hash nameHash = hash_time33(name); Hash nameHash = hash_time33(name);
return arg_init_hash(nameHash, type, content, size, next); return arg_init_hash(nameHash, type, content, size, next);
} }
uint16_t arg_totleSize(Arg* self) { void arg_init_stack(Arg* self, uint8_t* buffer, uint32_t size) {
self->_.buffer = buffer;
self->size = size;
self->type = ARG_TYPE_UNDEF;
self->name_hash = 0;
self->serialized = PIKA_FALSE;
}
uint32_t arg_totleSize(Arg* self) {
return ((Arg*)self)->size + sizeof(Arg); return ((Arg*)self)->size + sizeof(Arg);
} }
void arg_freeContent(Arg* self) { void arg_freeContent(Arg* self) {
if (NULL != self) { if (NULL != self) {
uint16_t totleSize = arg_totleSize(self); uint32_t totleSize = arg_totleSize(self);
pikaFree(self, totleSize); pikaFree(self, totleSize);
return; return;
} }
} }
Arg* arg_setContent(Arg* self, uint8_t* content, uint16_t size) { Arg* arg_setContent(Arg* self, uint8_t* content, uint32_t size) {
if (NULL == self) { if (NULL == self) {
/* malloc */ /* malloc */
return arg_init("", ARG_TYPE_VOID, content, size, NULL); return arg_init("", ARG_TYPE_NONE, content, size, NULL);
} }
/* only copy */ /* only copy */
if (arg_getSize(self) == size) { if (arg_getSize(self) >= size) {
__platform_memcpy(((Arg*)self)->content, content, size); __platform_memcpy(arg_getContent((Arg*)self), content, size);
return self; return self;
} }
@ -109,7 +119,7 @@ Arg* arg_setContent(Arg* self, uint8_t* content, uint16_t size) {
Arg* arg_setNameHash(Arg* self, Hash nameHash) { Arg* arg_setNameHash(Arg* self, Hash nameHash) {
if (NULL == self) { if (NULL == self) {
return arg_init_hash(nameHash, ARG_TYPE_VOID, NULL, 0, NULL); return arg_init_hash(nameHash, ARG_TYPE_NONE, NULL, 0, NULL);
} }
Arg* arg = (Arg*)self; Arg* arg = (Arg*)self;
arg->name_hash = nameHash; arg->name_hash = nameHash;
@ -130,6 +140,9 @@ Arg* arg_setType(Arg* self, ArgType type) {
Arg* arg_setBytes(Arg* self, char* name, uint8_t* src, size_t size) { Arg* arg_setBytes(Arg* self, char* name, uint8_t* src, size_t size) {
self = arg_newContent(self, size + sizeof(size_t) + 1); self = arg_newContent(self, size + sizeof(size_t) + 1);
if (NULL == self) {
return NULL;
}
self = arg_setName(self, name); self = arg_setName(self, name);
self = arg_setType(self, ARG_TYPE_BYTES); self = arg_setType(self, ARG_TYPE_BYTES);
void* dir = arg_getContent(self); void* dir = arg_getContent(self);
@ -146,8 +159,8 @@ Arg* arg_setBytes(Arg* self, char* name, uint8_t* src, size_t size) {
} }
Arg* arg_newContent(Arg* self, uint32_t size) { Arg* arg_newContent(Arg* self, uint32_t size) {
Arg* newContent = arg_init("", ARG_TYPE_VOID, NULL, size, NULL);
arg_freeContent(self); arg_freeContent(self);
Arg* newContent = arg_init("", ARG_TYPE_NONE, NULL, size, NULL);
return newContent; return newContent;
} }
@ -211,15 +224,28 @@ void* arg_getHeapStructDeinitFun(Arg* self) {
} }
Arg* arg_setInt(Arg* self, char* name, int64_t val) { Arg* arg_setInt(Arg* self, char* name, int64_t val) {
return arg_init(name, ARG_TYPE_INT, (uint8_t*)&val, sizeof(val), NULL); if (NULL == self) {
return arg_init(name, ARG_TYPE_INT, (uint8_t*)&val, sizeof(val), NULL);
}
self = arg_setContent(self, (uint8_t*)&val, sizeof(val));
self = arg_setType(self, ARG_TYPE_INT);
self = arg_setName(self, name);
return self;
} }
Arg* arg_setNull(Arg* self) { Arg* arg_setNull(Arg* self) {
return arg_init("", ARG_TYPE_NULL, NULL, 0, NULL); return arg_init("", ARG_TYPE_NONE, NULL, 0, NULL);
} }
Arg* arg_setFloat(Arg* self, char* name, double val) { Arg* arg_setFloat(Arg* self, char* name, double val) {
return arg_init(name, ARG_TYPE_FLOAT, (uint8_t*)&val, sizeof(val), NULL); if (NULL == self) {
return arg_init(name, ARG_TYPE_FLOAT, (uint8_t*)&val, sizeof(val),
NULL);
}
self = arg_setContent(self, (uint8_t*)&val, sizeof(val));
self = arg_setType(self, ARG_TYPE_FLOAT);
self = arg_setName(self, name);
return self;
} }
double arg_getFloat(Arg* self) { double arg_getFloat(Arg* self) {
@ -227,7 +253,7 @@ double arg_getFloat(Arg* self) {
return -999.999; return -999.999;
} }
return *(double*)self->content; return *(double*)arg_getContent(self);
} }
Arg* arg_setPtr(Arg* self, char* name, ArgType type, void* pointer) { Arg* arg_setPtr(Arg* self, char* name, ArgType type, void* pointer) {
@ -235,22 +261,26 @@ Arg* arg_setPtr(Arg* self, char* name, ArgType type, void* pointer) {
} }
Arg* arg_setStr(Arg* self, char* name, char* string) { Arg* arg_setStr(Arg* self, char* name, char* string) {
if (NULL == string) {
return NULL;
}
return arg_init(name, ARG_TYPE_STRING, (uint8_t*)string, return arg_init(name, ARG_TYPE_STRING, (uint8_t*)string,
strGetSize(string) + 1, NULL); strGetSize(string) + 1, NULL);
} }
int64_t arg_getInt(Arg* self) { int64_t arg_getInt(Arg* self) {
pika_assert(NULL!=self);
if (NULL == arg_getContent(self)) { if (NULL == arg_getContent(self)) {
return -999999; return -999999;
} }
return *(int64_t*)self->content; return *(int64_t*)arg_getContent(self);
} }
void* arg_getPtr(Arg* self) { void* arg_getPtr(Arg* self) {
if (NULL == arg_getContent(self)) { if (NULL == arg_getContent(self)) {
return NULL; return NULL;
} }
return *(void**)self->content; return *(void**)arg_getContent(self);
} }
char* arg_getStr(Arg* self) { char* arg_getStr(Arg* self) {
return (char*)arg_getContent(self); return (char*)arg_getContent(self);
@ -265,12 +295,12 @@ Hash arg_getNameHash(Arg* self) {
ArgType arg_getType(Arg* self) { ArgType arg_getType(Arg* self) {
if (NULL == self) { if (NULL == self) {
return ARG_TYPE_NULL; return ARG_TYPE_NONE;
} }
return self->type; return (ArgType)self->type;
} }
uint16_t arg_getContentSize(Arg* self) { uint32_t arg_getContentSize(Arg* self) {
return arg_getSize(self); return arg_getSize(self);
} }
@ -278,22 +308,45 @@ Arg* New_arg(void* voidPointer) {
return NULL; return NULL;
} }
Arg* arg_copy(Arg* argToBeCopy) { Arg* arg_copy(Arg* arg_src) {
if (NULL == argToBeCopy) { if (NULL == arg_src) {
return NULL; return NULL;
} }
ArgType arg_type = arg_getType(argToBeCopy); ArgType arg_type = arg_getType(arg_src);
if (ARG_TYPE_OBJECT == arg_type) { if (ARG_TYPE_OBJECT == arg_type) {
obj_refcntInc(arg_getPtr(argToBeCopy)); obj_refcntInc((PikaObj*)arg_getPtr(arg_src));
} }
Arg* argCopied = New_arg(NULL); Arg* argCopied = New_arg(NULL);
argCopied = arg_setContent(argCopied, arg_getContent(argToBeCopy), argCopied = arg_setContent(argCopied, arg_getContent(arg_src),
arg_getContentSize(argToBeCopy)); arg_getContentSize(arg_src));
argCopied = arg_setNameHash(argCopied, arg_getNameHash(argToBeCopy)); argCopied = arg_setNameHash(argCopied, arg_getNameHash(arg_src));
argCopied = arg_setType(argCopied, arg_getType(argToBeCopy)); argCopied = arg_setType(argCopied, arg_getType(arg_src));
return argCopied; return argCopied;
} }
Arg* arg_copy_noalloc(Arg* arg_src, Arg* arg_dict) {
if (NULL == arg_src) {
return NULL;
}
if (NULL == arg_dict){
return arg_copy(arg_src);
}
/* size is too big to be copied by noalloc */
if (arg_getSize(arg_src) > arg_getSize(arg_dict)) {
return arg_copy(arg_src);
}
ArgType arg_type = arg_getType(arg_src);
if (ARG_TYPE_OBJECT == arg_type) {
obj_refcntInc((PikaObj*)arg_getPtr(arg_src));
}
arg_dict->serialized = PIKA_FALSE;
arg_dict = arg_setContent(arg_dict, arg_getContent(arg_src),
arg_getContentSize(arg_src));
arg_dict = arg_setNameHash(arg_dict, arg_getNameHash(arg_src));
arg_dict = arg_setType(arg_dict, arg_getType(arg_src));
return arg_dict;
}
Arg* arg_append(Arg* self, void* new_content, size_t new_size) { Arg* arg_append(Arg* self, void* new_content, size_t new_size) {
uint8_t* old_content = arg_getContent(self); uint8_t* old_content = arg_getContent(self);
size_t old_size = arg_getContentSize(self); size_t old_size = arg_getContentSize(self);
@ -365,31 +418,14 @@ exit:
} }
void arg_deinit(Arg* self) { void arg_deinit(Arg* self) {
if (NULL == self) {
return;
}
/* deinit arg pointed heap */ /* deinit arg pointed heap */
arg_deinitHeap(self); arg_deinitHeap(self);
if (!self->serialized) {
return;
}
/* free the ref */ /* free the ref */
arg_freeContent(self); arg_freeContent(self);
} }
Arg* arg_getNext(Arg* self) {
return self->next;
}
uint16_t arg_getSize(Arg* self) {
return self->size;
}
uint8_t* arg_getContent(Arg* self) {
return self->content;
}
void arg_setNext(Arg* self, Arg* next) {
self->next = next;
}
uint8_t argType_isObject(ArgType type) {
if (ARG_TYPE_OBJECT == type || ARG_TYPE_OBJECT_NEW == type) {
return 1;
}
return 0;
}

View File

@ -35,8 +35,6 @@ typedef uint32_t Hash;
typedef enum { typedef enum {
ARG_TYPE_UNDEF = 0, ARG_TYPE_UNDEF = 0,
ARG_TYPE_NONE, ARG_TYPE_NONE,
ARG_TYPE_NULL,
ARG_TYPE_VOID,
ARG_TYPE_INT, ARG_TYPE_INT,
ARG_TYPE_FLOAT, ARG_TYPE_FLOAT,
ARG_TYPE_STRING, ARG_TYPE_STRING,
@ -58,30 +56,34 @@ typedef enum {
typedef void (*StructDeinitFun)(void* struct_); typedef void (*StructDeinitFun)(void* struct_);
typedef struct Arg Arg; typedef struct Arg Arg;
struct Arg { typedef union {
Arg* next; Arg* next;
uint16_t size; uint8_t* buffer;
} _arg_union;
struct Arg {
_arg_union _;
uint32_t size;
uint8_t type; uint8_t type;
uint8_t sub_type; PIKA_BOOL serialized;
Hash name_hash; Hash name_hash;
uint8_t content[]; uint8_t content[];
}; };
Arg* arg_getNext(Arg* self); Arg* arg_getNext(Arg* self);
uint16_t arg_getSize(Arg* self); uint32_t arg_getSize(Arg* self);
uint8_t* arg_getContent(Arg* self); uint8_t* arg_getContent(Arg* self);
uint16_t arg_totleSize(Arg* self); uint32_t arg_totleSize(Arg* self);
void arg_setNext(Arg* self, Arg* next); void arg_setNext(Arg* self, Arg* next);
uint16_t arg_getTotleSize(Arg* self); uint32_t arg_getTotleSize(Arg* self);
void arg_freeContent(Arg* self); void arg_freeContent(Arg* self);
Arg* arg_setName(Arg* self, char* name); Arg* arg_setName(Arg* self, char* name);
Arg* arg_setContent(Arg* self, uint8_t* content, uint16_t size); Arg* arg_setContent(Arg* self, uint8_t* content, uint32_t size);
Arg* arg_newContent(Arg* self, uint32_t size); Arg* arg_newContent(Arg* self, uint32_t size);
Arg* arg_setType(Arg* self, ArgType type); Arg* arg_setType(Arg* self, ArgType type);
Hash arg_getNameHash(Arg* self); Hash arg_getNameHash(Arg* self);
ArgType arg_getType(Arg* self); ArgType arg_getType(Arg* self);
uint16_t arg_getContentSize(Arg* self); uint32_t arg_getContentSize(Arg* self);
Hash hash_time33(char* str); Hash hash_time33(char* str);
Arg* arg_setInt(Arg* self, char* name, int64_t val); Arg* arg_setInt(Arg* self, char* name, int64_t val);
@ -89,6 +91,14 @@ Arg* arg_setFloat(Arg* self, char* name, double val);
Arg* arg_setPtr(Arg* self, char* name, ArgType type, void* pointer); Arg* arg_setPtr(Arg* self, char* name, ArgType type, void* pointer);
Arg* arg_setStr(Arg* self, char* name, char* string); Arg* arg_setStr(Arg* self, char* name, char* string);
Arg* arg_setNull(Arg* self); Arg* arg_setNull(Arg* self);
Arg* arg_setBytes(Arg* self, char* name, uint8_t* src, size_t size);
#define arg_newInt(val) arg_setInt(NULL, "", (val))
#define arg_newFloat(val) arg_setFloat(NULL, "", (val))
#define arg_newPtr(type, pointer) arg_setPtr(NULL, "", (type), (pointer))
#define arg_newStr(string) arg_setStr(NULL, "", (string))
#define arg_newNull() arg_setNull(NULL)
#define arg_newBytes(src, size) arg_setBytes(NULL, "", (src), (size))
int64_t arg_getInt(Arg* self); int64_t arg_getInt(Arg* self);
double arg_getFloat(Arg* self); double arg_getFloat(Arg* self);
@ -97,6 +107,7 @@ char* arg_getStr(Arg* self);
uint8_t* arg_getBytes(Arg* self); uint8_t* arg_getBytes(Arg* self);
size_t arg_getBytesSize(Arg* self); size_t arg_getBytesSize(Arg* self);
Arg* arg_copy(Arg* argToBeCopy); Arg* arg_copy(Arg* argToBeCopy);
Arg* arg_copy_noalloc(Arg* argToBeCopy, Arg* argToBeCopyTo);
uint8_t* arg_getContent(Arg* self); uint8_t* arg_getContent(Arg* self);
void arg_deinit(Arg* self); void arg_deinit(Arg* self);
@ -114,9 +125,25 @@ Arg* arg_setHeapStruct(Arg* self,
void* struct_deinit_fun); void* struct_deinit_fun);
void* arg_getHeapStruct(Arg* self); void* arg_getHeapStruct(Arg* self);
void arg_deinitHeap(Arg* self); void arg_deinitHeap(Arg* self);
Arg* arg_setBytes(Arg* self, char* name, uint8_t* src, size_t size);
void arg_printBytes(Arg* self); void arg_printBytes(Arg* self);
Arg* arg_loadFile(Arg* self, char* filename); Arg* arg_loadFile(Arg* self, char* filename);
uint8_t argType_isObject(ArgType type); uint8_t argType_isObject(ArgType type);
#define arg_getNext(self) ((self)->_.next)
#define arg_getSize(self) ((self)->size)
#define arg_getContent(self) \
((self)->serialized ? (self)->content : ((self)->_.buffer))
#define arg_getNext(self) ((self)->_.next)
#define arg_setNext(self, __next) ((self)->_.next = (__next))
#define argType_isObject(type) \
((type) == ARG_TYPE_OBJECT || (type) == ARG_TYPE_OBJECT_NEW)
#endif #endif
#define arg_newReg(__name, __size) \
Arg __name = {0}; \
uint8_t __##__name##_buff[__size] = {0}; \
arg_init_stack(&__name, __##__name##_buff, __size)
void arg_init_stack(Arg* self, uint8_t* buffer, uint32_t size);

View File

@ -79,12 +79,22 @@ PIKA_RES args_setStr(Args* self, char* name, char* strIn) {
PIKA_RES errCode = PIKA_RES_OK; PIKA_RES errCode = PIKA_RES_OK;
Arg* argNew = New_arg(NULL); Arg* argNew = New_arg(NULL);
argNew = arg_setStr(argNew, name, strIn); argNew = arg_setStr(argNew, name, strIn);
if (NULL == argNew) {
return PIKA_RES_ERR_INVALID_PTR;
}
args_setArg(self, argNew); args_setArg(self, argNew);
return errCode; return errCode;
} }
PIKA_RES args_pushArg(Args* self, Arg* arg) { PIKA_RES args_pushArg(Args* self, Arg* arg) {
link_addNode(self, arg); Arg* new_arg = NULL;
if (!arg->serialized) {
new_arg = arg_copy(arg);
arg_deinit(arg);
} else {
new_arg = arg;
}
link_addNode(self, new_arg);
return PIKA_RES_OK; return PIKA_RES_OK;
} }
@ -172,7 +182,7 @@ ArgType args_getType(Args* self, char* name) {
Arg* arg = NULL; Arg* arg = NULL;
arg = args_getArg(self, name); arg = args_getArg(self, name);
if (NULL == arg) { if (NULL == arg) {
return ARG_TYPE_NULL; return ARG_TYPE_NONE;
} }
return arg_getType(arg); return arg_getType(arg);
} }
@ -216,6 +226,9 @@ PIKA_RES args_setStructWithSize(Args* self,
void* args_getStruct(Args* self, char* name) { void* args_getStruct(Args* self, char* name) {
Arg* struct_arg = args_getArg(self, name); Arg* struct_arg = args_getArg(self, name);
if (NULL == struct_arg) {
return NULL;
}
return arg_getContent(struct_arg); return arg_getContent(struct_arg);
} }
@ -293,6 +306,9 @@ PIKA_RES __updateArg(Args* self, Arg* argNew) {
arg_setNext((Arg*)priorNode, (Arg*)nodeToUpdate); arg_setNext((Arg*)priorNode, (Arg*)nodeToUpdate);
goto exit; goto exit;
exit: exit:
if (!argNew->serialized) {
return PIKA_RES_OK;
}
arg_freeContent(argNew); arg_freeContent(argNew);
return PIKA_RES_OK; return PIKA_RES_OK;
} }
@ -402,7 +418,7 @@ char* getPrintStringFromPtr(Args* self, char* name, void* val) {
Args buffs = {0}; Args buffs = {0};
char* res = NULL; char* res = NULL;
uint64_t intVal = (uintptr_t)val; uint64_t intVal = (uintptr_t)val;
char* valString = strsFormat(&buffs, 32, "0x%llx", intVal); char* valString = strsFormat(&buffs, 32, "%p", intVal);
res = getPrintSring(self, name, valString); res = getPrintSring(self, name, valString);
strsDeinit(&buffs); strsDeinit(&buffs);
return res; return res;
@ -435,7 +451,8 @@ char* args_print(Args* self, char* name) {
goto exit; goto exit;
} }
if (argType_isObject(type)) { if (argType_isObject(type) || ARG_TYPE_POINTER == type ||
ARG_TYPE_METHOD_NATIVE_CONSTRUCTOR) {
void* val = args_getPtr(self, name); void* val = args_getPtr(self, name);
res = getPrintStringFromPtr(self, name, val); res = getPrintStringFromPtr(self, name, val);
goto exit; goto exit;
@ -544,6 +561,26 @@ Arg* list_getArg(PikaList* self, int index) {
return args_getArg(&self->super, i_str); return args_getArg(&self->super, i_str);
} }
int list_getInt(PikaList* self, int index) {
Arg* arg = list_getArg(self, index);
return arg_getInt(arg);
}
double list_getFloat(PikaList* self, int index) {
Arg* arg = list_getArg(self, index);
return arg_getFloat(arg);
}
char* list_getStr(PikaList* self, int index) {
Arg* arg = list_getArg(self, index);
return arg_getStr(arg);
}
void* list_getPtr(PikaList* self, int index) {
Arg* arg = list_getArg(self, index);
return arg_getPtr(arg);
}
PIKA_RES list_append(PikaList* self, Arg* arg) { PIKA_RES list_append(PikaList* self, Arg* arg) {
int top = args_getInt(&self->super, "top"); int top = args_getInt(&self->super, "top");
char buff[11]; char buff[11];
@ -583,8 +620,14 @@ char* strsFormatArg(Args* out_buffs, char* fmt, Arg* arg) {
res = strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, fmt, val); res = strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, fmt, val);
goto exit; goto exit;
} }
if (ARG_TYPE_NONE == type) {
res = strsFormat(&buffs, PIKA_SPRINTF_BUFF_SIZE, fmt, "None");
goto exit;
}
exit: exit:
res = strsCopy(out_buffs, res); if (NULL != res) {
res = strsCopy(out_buffs, res);
}
strsDeinit(&buffs); strsDeinit(&buffs);
return res; return res;
} }
@ -594,7 +637,7 @@ char* strsFormatList(Args* out_buffs, char* fmt, PikaList* list) {
char* res = NULL; char* res = NULL;
char* fmt_buff = strsCopy(&buffs, fmt); char* fmt_buff = strsCopy(&buffs, fmt);
char* fmt_item = strsPopToken(&buffs, fmt_buff, '%'); char* fmt_item = strsPopToken(&buffs, fmt_buff, '%');
Arg* res_buff = arg_setStr(NULL, "", fmt_item); Arg* res_buff = arg_newStr(fmt_item);
for (size_t i = 0; i < list_getSize(list); i++) { for (size_t i = 0; i < list_getSize(list); i++) {
Args buffs_item = {0}; Args buffs_item = {0};
@ -602,6 +645,10 @@ char* strsFormatList(Args* out_buffs, char* fmt, PikaList* list) {
char* fmt_item = strsPopToken(&buffs_item, fmt_buff, '%'); char* fmt_item = strsPopToken(&buffs_item, fmt_buff, '%');
fmt_item = strsAppend(&buffs_item, "%", fmt_item); fmt_item = strsAppend(&buffs_item, "%", fmt_item);
char* str_format = strsFormatArg(&buffs_item, fmt_item, arg); char* str_format = strsFormatArg(&buffs_item, fmt_item, arg);
if (NULL == str_format) {
strsDeinit(&buffs_item);
goto exit;
}
res_buff = arg_strAppend(res_buff, str_format); res_buff = arg_strAppend(res_buff, str_format);
strsDeinit(&buffs_item); strsDeinit(&buffs_item);
} }

View File

@ -162,6 +162,10 @@ PikaDict* New_dict(void);
#define list_deinit(self) (args_deinit((&((self)->super)))) #define list_deinit(self) (args_deinit((&((self)->super))))
PIKA_RES list_append(PikaList* self, Arg* arg); PIKA_RES list_append(PikaList* self, Arg* arg);
PIKA_RES list_setArg(PikaList* self, int index, Arg* arg); PIKA_RES list_setArg(PikaList* self, int index, Arg* arg);
int list_getInt(PikaList* self, int index);
double list_getFloat(PikaList* self, int index);
char* list_getStr(PikaList* self, int index);
void* list_getPtr(PikaList* self, int index);
Arg* list_getArg(PikaList* self, int index); Arg* list_getArg(PikaList* self, int index);
size_t list_getSize(PikaList* self); size_t list_getSize(PikaList* self);
char* strsFormatArg(Args* out_buffs, char* fmt, Arg* arg); char* strsFormatArg(Args* out_buffs, char* fmt, Arg* arg);
@ -170,6 +174,12 @@ char* strsFormatArg(Args* out_buffs, char* fmt, Arg* arg);
#define tuple_deinit(self) (list_deinit((&((self)->super)))) #define tuple_deinit(self) (list_deinit((&((self)->super))))
#define tuple_getArg(self, index) (list_getArg((&((self)->super)), (index))) #define tuple_getArg(self, index) (list_getArg((&((self)->super)), (index)))
#define tuple_getSize(self) (list_getSize((&((self)->super)))) #define tuple_getSize(self) (list_getSize((&((self)->super))))
#define tuple_getInt(self, index) (list_getInt((&((self)->super)), (index)))
#define tuple_getFloat(self, index) \
(list_getFloat((&((self)->super)), (index)))
#define tuple_getStr(self, index) (list_getStr((&((self)->super)), (index)))
#define tuple_getPtr(self, index) (list_getPtr((&((self)->super)), (index)))
#define tuple_getType(self, index) (list_getType((&((self)->super)), (index)))
PikaList* New_list(void); PikaList* New_list(void);
PikaTuple* New_tuple(void); PikaTuple* New_tuple(void);

View File

@ -55,7 +55,7 @@ void link_addNode(Link* self, void* content) {
self->firstNode = content; self->firstNode = content;
// change the first node to new node // change the first node to new node
arg_setNext(content, (Arg*)secondNode); arg_setNext((Arg*)content, (Arg*)secondNode);
} }
static void __link_removeNode(Link* self, static void __link_removeNode(Link* self,

View File

@ -32,11 +32,3 @@
void linkNode_deinit(LinkNode* self) { void linkNode_deinit(LinkNode* self) {
arg_deinit((Arg*)self); arg_deinit((Arg*)self);
} }
void linkNode_init(LinkNode* self, void* args) {
/* attribute */
}
LinkNode* New_linkNode(void* args) {
return NULL;
}

View File

@ -76,12 +76,12 @@ void pikaFree(void* mem, uint32_t size) {
pikaMemInfo.heapUsed -= size; pikaMemInfo.heapUsed -= size;
} }
uint16_t pikaMemNow(void) { uint32_t pikaMemNow(void) {
return pikaMemInfo.heapUsed; return pikaMemInfo.heapUsed;
// return 0; // return 0;
} }
uint16_t pikaMemMax(void) { uint32_t pikaMemMax(void) {
return pikaMemInfo.heapUsedMax; return pikaMemInfo.heapUsedMax;
} }
@ -109,6 +109,7 @@ Pool pool_init(uint32_t size, uint8_t aline) {
pool.mem = __platform_malloc(pool_aline(&pool, pool.size)); pool.mem = __platform_malloc(pool_aline(&pool, pool.size));
pool.first_free_block = 0; pool.first_free_block = 0;
pool.purl_free_block_start = 0; pool.purl_free_block_start = 0;
pool.inited = PIKA_TRUE;
return pool; return pool;
} }
@ -295,3 +296,27 @@ uint8_t bitmap_get(BitMap bitmap, uint32_t index) {
void bitmap_deinit(BitMap bitmap) { void bitmap_deinit(BitMap bitmap) {
__platform_free(bitmap); __platform_free(bitmap);
} }
#if PIKA_POOL_ENABLE
Pool pikaPool = {0};
void* __user_malloc(size_t size) {
return pool_malloc(&pikaPool, size);
}
void __user_free(void* ptrm, size_t size) {
pool_free(&pikaPool, ptrm, size);
}
#endif
void mem_pool_init(void) {
#if PIKA_POOL_ENABLE
if (!pikaPool.inited) {
pikaPool = pool_init(PIKA_POOL_SIZE, PIKA_POOL_ALIGN);
}
#endif
}
void mem_pool_deinit(void) {
#if PIKA_POOL_ENABLE
pool_deinit(&pikaPool);
#endif
}

View File

@ -29,6 +29,7 @@
#define __MEMORY_H__ #define __MEMORY_H__
#include "PikaPlatform.h" #include "PikaPlatform.h"
#include "PikaVersion.h"
/*! \NOTE: Make sure #include "plooc_class.h" is close to the class definition /*! \NOTE: Make sure #include "plooc_class.h" is close to the class definition
*/ */
@ -54,14 +55,15 @@ struct Pool{
uint32_t size; uint32_t size;
uint32_t first_free_block; uint32_t first_free_block;
uint32_t purl_free_block_start; uint32_t purl_free_block_start;
PIKA_BOOL inited;
) )
}; };
/* clang-format on */ /* clang-format on */
void pikaFree(void* mem, uint32_t size); void pikaFree(void* mem, uint32_t size);
void* pikaMalloc(uint32_t size); void* pikaMalloc(uint32_t size);
uint16_t pikaMemNow(void); uint32_t pikaMemNow(void);
uint16_t pikaMemMax(void); uint32_t pikaMemMax(void);
void pikaMemMaxReset(void); void pikaMemMaxReset(void);
uint32_t aline_by(uint32_t size, uint32_t aline); uint32_t aline_by(uint32_t size, uint32_t aline);
@ -72,11 +74,8 @@ uint8_t bitmap_get(BitMap bitmap, uint32_t index);
uint8_t bitmap_getByte(BitMap bitmap, uint32_t index); uint8_t bitmap_getByte(BitMap bitmap, uint32_t index);
void bitmap_deinit(BitMap bitmap); void bitmap_deinit(BitMap bitmap);
Pool pool_init(uint32_t size, uint8_t aline); void mem_pool_deinit(void);
void* pool_malloc(Pool* pool, uint32_t size); void mem_pool_init(void);
void pool_free(Pool* pool, void* mem, uint32_t size);
void pool_deinit(Pool* pool);
void pool_printBlocks(Pool* pool, uint32_t block_min, uint32_t block_max);
#undef __DATA_MEMORY_CLASS_IMPLEMENT__ #undef __DATA_MEMORY_CLASS_IMPLEMENT__
#endif #endif

View File

@ -56,25 +56,6 @@ int32_t queue_pushArg(Queue* queue, Arg* arg) {
return args_setArg(args, arg); return args_setArg(args, arg);
} }
Arg* __queue_popArg(Queue* queue, uint8_t is_deinit_arg) {
Args* args = queue;
uint64_t top = args_getInt(args, "__t");
uint64_t bottom = args_getInt(args, "__b");
if (top - bottom < 1) {
return NULL;
}
/* add bottom */
args_setInt(args, "__b", bottom + 1);
char buff[11];
Arg* res = args_getArg(args, fast_itoa(buff, bottom));
if (is_deinit_arg) {
args_removeArg(args, res);
} else {
args_removeArg_notDeinitArg(args, res);
}
return res;
}
Arg* __queue_popArg_noRmoveArg(Queue* queue) { Arg* __queue_popArg_noRmoveArg(Queue* queue) {
Args* args = queue; Args* args = queue;
uint64_t top = args_getInt(args, "__t"); uint64_t top = args_getInt(args, "__t");
@ -90,16 +71,8 @@ Arg* __queue_popArg_noRmoveArg(Queue* queue) {
return res; return res;
} }
Arg* queue_popArg(Queue* queue) {
return __queue_popArg(queue, 1);
}
Arg* queue_popArg_notDeinitArg(Queue* queue) {
return __queue_popArg(queue, 0);
}
int32_t queue_pushInt(Queue* queue, int val) { int32_t queue_pushInt(Queue* queue, int val) {
return queue_pushArg(queue, arg_setInt(NULL, "", val)); return queue_pushArg(queue, arg_newInt(val));
} }
int64_t queue_popInt(Queue* queue) { int64_t queue_popInt(Queue* queue) {
@ -107,7 +80,7 @@ int64_t queue_popInt(Queue* queue) {
} }
int32_t queue_pushFloat(Queue* queue, double val) { int32_t queue_pushFloat(Queue* queue, double val) {
return queue_pushArg(queue, arg_setFloat(NULL, "", val)); return queue_pushArg(queue, arg_newFloat(val));
} }
double queue_popFloat(Queue* queue) { double queue_popFloat(Queue* queue) {
@ -115,7 +88,7 @@ double queue_popFloat(Queue* queue) {
} }
int32_t queue_pushStr(Queue* queue, char* str) { int32_t queue_pushStr(Queue* queue, char* str) {
return queue_pushArg(queue, arg_setStr(NULL, "", str)); return queue_pushArg(queue, arg_newStr(str));
} }
char* queue_popStr(Queue* queue) { char* queue_popStr(Queue* queue) {

View File

@ -31,7 +31,7 @@
void stack_reset(Stack* stack) { void stack_reset(Stack* stack) {
stack->sp = (uint8_t*)arg_getContent(stack->stack_pyload); stack->sp = (uint8_t*)arg_getContent(stack->stack_pyload);
stack->sp_size = (int16_t*)arg_getContent(stack->stack_size_array); stack->sp_size = (int32_t*)arg_getContent(stack->stack_size_array);
stack->top = 0; stack->top = 0;
} }
@ -44,12 +44,12 @@ int32_t stack_init(Stack* stack) {
return 0; return 0;
}; };
void stack_pushSize(Stack* stack, int16_t size) { void stack_pushSize(Stack* stack, int32_t size) {
*(stack->sp_size) = size; *(stack->sp_size) = size;
stack->sp_size++; stack->sp_size++;
} }
int16_t stack_popSize(Stack* stack) { int32_t stack_popSize(Stack* stack) {
stack->sp_size--; stack->sp_size--;
return *(stack->sp_size); return *(stack->sp_size);
} }
@ -74,7 +74,15 @@ void stack_pushPyload(Stack* stack, Arg* content, size_t size) {
while (1) { while (1) {
} }
} }
__platform_memcpy(stack->sp, content, size); if (content->serialized) {
__platform_memcpy(stack->sp, content, size);
} else {
__platform_memcpy(stack->sp, content, sizeof(Arg));
__platform_memcpy(stack->sp + sizeof(Arg), content->_.buffer,
size - sizeof(Arg));
/* transfer to serialized form */
((Arg*)stack->sp)->serialized = PIKA_TRUE;
}
stack->sp += size; stack->sp += size;
} }
@ -83,7 +91,7 @@ uint8_t* stack_popPyload(Stack* stack, size_t size) {
return stack->sp; return stack->sp;
} }
int32_t stack_pushArg(Stack* stack, Arg* arg) { static int32_t _stack_pushArg(Stack* stack, Arg* arg, PIKA_BOOL is_alloc) {
stack->top++; stack->top++;
size_t size = arg_getTotleSize(arg); size_t size = arg_getTotleSize(arg);
@ -94,41 +102,65 @@ int32_t stack_pushArg(Stack* stack, Arg* arg) {
#endif #endif
/* add ref_cnt to keep object in stack */ /* add ref_cnt to keep object in stack */
if (argType_isObject(arg_getType(arg))) { if (argType_isObject(arg_getType(arg))) {
obj_refcntInc(arg_getPtr(arg)); obj_refcntInc((PikaObj*)arg_getPtr(arg));
} }
stack_pushSize(stack, size); stack_pushSize(stack, size);
stack_pushPyload(stack, arg, size); stack_pushPyload(stack, arg, size);
arg_deinit(arg); if (is_alloc) {
arg_deinit(arg);
} else {
arg_deinitHeap(arg);
}
return 0; return 0;
} }
int32_t stack_pushArg(Stack* stack, Arg* arg) {
if (arg->serialized) {
return _stack_pushArg(stack, arg, PIKA_TRUE);
}
return _stack_pushArg(stack, arg, PIKA_FALSE);
}
int32_t stack_pushStr(Stack* stack, char* str) { int32_t stack_pushStr(Stack* stack, char* str) {
Arg* newArg = arg_setStr(NULL, "", str); Arg* newArg = arg_newStr(str);
return stack_pushArg(stack, newArg); return stack_pushArg(stack, newArg);
} }
Arg* stack_popArg(Stack* stack) { Arg* _stack_popArg(Stack* stack, Arg* arg_dict, PIKA_BOOL is_alloc) {
if (stack->top == 0) { if (stack->top == 0) {
return NULL; return NULL;
} }
stack->top--; stack->top--;
int16_t size = stack_popSize(stack); int32_t size = stack_popSize(stack);
Arg* arg = arg_copy((Arg*)stack_popPyload(stack, size)); Arg* arg = NULL;
if (is_alloc) {
arg = arg_copy((Arg*)stack_popPyload(stack, size));
} else {
arg = arg_copy_noalloc((Arg*)stack_popPyload(stack, size), arg_dict);
}
ArgType type = arg_getType(arg); ArgType type = arg_getType(arg);
/* decrase ref_cnt */ /* decrase ref_cnt */
if (argType_isObject(type)) { if (argType_isObject(type)) {
obj_refcntDec(arg_getPtr(arg)); obj_refcntDec((PikaObj*)arg_getPtr(arg));
} }
return arg; return arg;
} }
Arg* stack_popArg_alloc(Stack* stack) {
return _stack_popArg(stack, NULL, PIKA_TRUE);
}
Arg* stack_popArg(Stack* stack, Arg* arg_dict) {
return _stack_popArg(stack, arg_dict, PIKA_FALSE);
}
char* stack_popStr(Stack* stack, char* outBuff) { char* stack_popStr(Stack* stack, char* outBuff) {
Arg* arg = stack_popArg(stack); Arg* arg = stack_popArg_alloc(stack);
strcpy(outBuff, arg_getStr(arg)); strcpy(outBuff, arg_getStr(arg));
arg_deinit(arg); arg_deinit(arg);
return outBuff; return outBuff;
} }
int8_t stack_getTop(Stack* stack) { int32_t stack_getTop(Stack* stack) {
return stack->top; return stack->top;
} }

View File

@ -33,8 +33,8 @@ typedef struct Stack_t {
Arg* stack_pyload; Arg* stack_pyload;
Arg* stack_size_array; Arg* stack_size_array;
uint8_t* sp; uint8_t* sp;
int16_t* sp_size; int32_t* sp_size;
int16_t top; int32_t top;
size_t stack_totle_size; size_t stack_totle_size;
} Stack; } Stack;
@ -42,11 +42,12 @@ int32_t stack_deinit(Stack* stack);
int32_t stack_pushStr(Stack* stack, char* str); int32_t stack_pushStr(Stack* stack, char* str);
char* stack_popStr(Stack* stack, char* outBuff); char* stack_popStr(Stack* stack, char* outBuff);
Arg* stack_popArg(Stack* stack);
int32_t stack_pushArg(Stack* stack, Arg* arg); int32_t stack_pushArg(Stack* stack, Arg* arg);
int8_t stack_getTop(Stack* stack); Arg* stack_popArg_alloc(Stack* stack);
Arg* stack_popArg(Stack* stack, Arg* arg_dict);
int32_t stack_getTop(Stack* stack);
int32_t stack_init(Stack* stack); int32_t stack_init(Stack* stack);
int16_t stack_popSize(Stack* stack); int32_t stack_popSize(Stack* stack);
void stack_pushSize(Stack* stack, int16_t size); void stack_pushSize(Stack* stack, int32_t size);
void stack_reset(Stack* stack); void stack_reset(Stack* stack);
#endif #endif

View File

@ -28,18 +28,6 @@
#include "dataString.h" #include "dataString.h"
#include "PikaPlatform.h" #include "PikaPlatform.h"
char* strAppendWithSize_unlimited(char* strOut, char* pData, int32_t Size) {
int32_t strOut_i = strGetSize(strOut);
for (int32_t i = 0; i < Size; i++) {
strOut[strOut_i + i] = pData[i];
}
strOut_i += Size;
// add \0 to the end of strOut
strOut[strOut_i] = 0;
return strOut;
}
char* strCut(char* strOut, char* strIn, char startSign, char endSign) { char* strCut(char* strOut, char* strIn, char startSign, char endSign) {
int32_t Size = strGetSize(strIn); int32_t Size = strGetSize(strIn);
int32_t iStart = 0; int32_t iStart = 0;
@ -89,10 +77,6 @@ char* strDeleteChar(char* strOut, char* strIn, char ch) {
return strOut; return strOut;
} }
char* strDeleteEnter(char* str) {
return strDeleteChar(str, str, '\n');
}
char* strAppendWithSize(char* strOut, char* pData, int32_t Size) { char* strAppendWithSize(char* strOut, char* pData, int32_t Size) {
int32_t strOut_i = strGetSize(strOut); int32_t strOut_i = strGetSize(strOut);
for (int32_t i = 0; i < Size; i++) { for (int32_t i = 0; i < Size; i++) {
@ -120,33 +104,10 @@ int32_t strGetTokenNum(char* strIn, char sign) {
} }
size_t strGetSize(char* pData) { size_t strGetSize(char* pData) {
pika_assert(pData != NULL);
return strlen(pData); return strlen(pData);
} }
char* strAppend_unlimited(char* strOut, char* pData) {
uint32_t Size = 0;
Size = strGetSize(pData);
return strAppendWithSize_unlimited(strOut, pData, Size);
}
char* strGetLastLine(char* strOut, char* strIn) {
int32_t size = strGetSize(strIn);
char sign = '\n';
uint32_t beginIndex = 0;
/* skip the latest '\n' */
for (int32_t i = size - 2; i > -1; i--) {
if (strIn[i] == sign) {
beginIndex = i + 1;
break;
}
}
__platform_memcpy(strOut, strIn + beginIndex, size - beginIndex);
strOut[size - beginIndex + 1] = 0;
return strOut;
}
char* strPointToLastToken(char* strIn, char sign) { char* strPointToLastToken(char* strIn, char sign) {
int32_t size = strGetSize(strIn); int32_t size = strGetSize(strIn);
for (int32_t i = size - 1; i > -1; i--) { for (int32_t i = size - 1; i > -1; i--) {
@ -226,31 +187,6 @@ char* strGetFirstToken(char* strOut, char* strIn, char sign) {
return strOut; return strOut;
} }
int32_t strGetToken(char* string, char** argv, char sign) {
int32_t argc = 0;
uint32_t i = 0;
// arg_i point32_t to the arg operated now
int32_t arg_i = 0;
// if not found ' ', then put chars from CMD to argv_tem
int32_t char_i = 0;
for (i = 0; i < strGetSize(string); i++) {
if (string[i] != sign) {
argv[arg_i][char_i] = string[i];
char_i++;
}
if (string[i] == sign) {
// write '\0' to the end of argv
argv[arg_i][char_i] = 0;
arg_i++;
char_i = 0;
}
// write '\0' to the end of last argv
argv[arg_i][char_i] = 0;
}
argc = arg_i + 1;
return argc;
}
char* strAppend(char* strOut, char* pData) { char* strAppend(char* strOut, char* pData) {
uint32_t Size = 0; uint32_t Size = 0;
Size = strGetSize(pData); Size = strGetSize(pData);
@ -287,13 +223,6 @@ char* strRemovePrefix(char* inputStr, char* prefix, char* outputStr) {
return outputStr; return outputStr;
} }
char* strClear(char* str) {
for (uint32_t i = 0; i < sizeof(str); i++) {
str[i] = 0;
}
return str;
}
int32_t strIsContain(char* str, char ch) { int32_t strIsContain(char* str, char ch) {
for (uint32_t i = 0; i < strGetSize(str); i++) { for (uint32_t i = 0; i < strGetSize(str); i++) {
if (str[i] == ch) { if (str[i] == ch) {
@ -324,3 +253,21 @@ char* strGetLine(char* strOut, char* strIn) {
strOut[lineSize] = 0; strOut[lineSize] = 0;
return strOut; return strOut;
} }
char* strGetLastLine(char* strOut, char* strIn) {
int32_t size = strGetSize(strIn);
char sign = '\n';
uint32_t beginIndex = 0;
/* skip the latest '\n' */
for (int32_t i = size - 2; i > -1; i--) {
if (strIn[i] == sign) {
beginIndex = i + 1;
break;
}
}
__platform_memcpy(strOut, strIn + beginIndex, size - beginIndex);
strOut[size - beginIndex + 1] = 0;
return strOut;
}

View File

@ -37,7 +37,7 @@ char* strAppend_unlimited(char* strOut, char* pData);
char* strAppendWithSize(char* strOut, char* pData, int32_t Size); char* strAppendWithSize(char* strOut, char* pData, int32_t Size);
/* cut */ /* cut */
char* strCut(char* strOut, char* strIn, char startSign, char endSign); char* strCut(char* strOut, char* strIn, char startSign, char endSign);
/* assert */ /* pika_assert */
int32_t strIsStartWith(char* str, char* strStart); int32_t strIsStartWith(char* str, char* strStart);
int32_t strEqu(char* str1, char* str2); int32_t strEqu(char* str1, char* str2);
/* delete */ /* delete */
@ -60,5 +60,6 @@ char* strPointToLastToken(char* strIn, char sign);
char* strGetLine(char* strOut, char* strIn); char* strGetLine(char* strOut, char* strIn);
int32_t strGetLineSize(char* str); int32_t strGetLineSize(char* str);
char* strPopLastToken(char* strIn, char sign); char* strPopLastToken(char* strIn, char sign);
char* strGetLastLine(char* strOut, char* strIn);
#endif #endif

View File

@ -53,6 +53,8 @@ char* strsGetDirectStr(Args* buffs_p, char* argPath) {
} }
char* strsAppend(Args* buffs_p, char* strOrigin, char* strToAppend) { char* strsAppend(Args* buffs_p, char* strOrigin, char* strToAppend) {
pika_assert(NULL != strToAppend);
pika_assert(NULL != strOrigin);
int32_t size = strGetSize(strOrigin) + strGetSize(strToAppend); int32_t size = strGetSize(strOrigin) + strGetSize(strToAppend);
char* buff = args_getBuff(buffs_p, size); char* buff = args_getBuff(buffs_p, size);
char* strOut = strCopy(buff, strOrigin); char* strOut = strCopy(buff, strOrigin);
@ -99,11 +101,19 @@ char* strsPopToken(Args* buffs_p, char* tokens, char sign) {
} }
char* strsCopy(Args* buffs_p, char* source) { char* strsCopy(Args* buffs_p, char* source) {
pika_assert(source != NULL);
int32_t size = strGetSize(source); int32_t size = strGetSize(source);
char* buff = args_getBuff(buffs_p, size); char* buff = args_getBuff(buffs_p, size);
return strCopy(buff, source); return strCopy(buff, source);
} }
char* strsCacheArg(Args* buffs_p, Arg* arg) {
pika_assert(arg != NULL);
char* res = strsCopy(buffs_p, arg_getStr(arg));
arg_deinit(arg);
return res;
}
char* strsFormat(Args* buffs_p, uint16_t buffSize, const char* fmt, ...) { char* strsFormat(Args* buffs_p, uint16_t buffSize, const char* fmt, ...) {
va_list args; va_list args;
va_start(args, fmt); va_start(args, fmt);
@ -114,6 +124,7 @@ char* strsFormat(Args* buffs_p, uint16_t buffSize, const char* fmt, ...) {
} }
Arg* arg_strAppend(Arg* arg_in, char* str_to_append) { Arg* arg_strAppend(Arg* arg_in, char* str_to_append) {
pika_assert(NULL != str_to_append);
Args buffs = {0}; Args buffs = {0};
char* str_out = strsAppend(&buffs, arg_getStr(arg_in), str_to_append); char* str_out = strsAppend(&buffs, arg_getStr(arg_in), str_to_append);
Arg* arg_out = arg_setStr(arg_in, "", str_out); Arg* arg_out = arg_setStr(arg_in, "", str_out);

View File

@ -43,4 +43,5 @@ Arg* arg_strAppend(Arg* arg_in, char* str_to_append);
char* strsReplace(Args* buffs, char* orig, char* rep, char* with); char* strsReplace(Args* buffs, char* orig, char* rep, char* with);
char* strsGetLine(Args* buffs, char* code); char* strsGetLine(Args* buffs, char* code);
void strsDeinit(Args* buffs); void strsDeinit(Args* buffs);
char* strsCacheArg(Args* buffs_p, Arg* arg);
#endif #endif

View File

@ -27,24 +27,16 @@
#ifndef __PIKA_CFG_VALID_H__ #ifndef __PIKA_CFG_VALID_H__
#define __PIKA_CFG_VALID_H__ #define __PIKA_CFG_VALID_H__
/* default configuration */ /* clang-format off */
#define PIKA_LINE_BUFF_SIZE 128
#define PIKA_SPRINTF_BUFF_SIZE 256 /*
#define PIKA_STACK_BUFF_SIZE 256 * Don't modify the "pika_config_valid.h" file!
#define PIKA_NAME_BUFF_SIZE 32 * If you want to change the config, create "pika_config.h",
#define PIKA_PATH_BUFF_SIZE 64 * then #define PIKA_CONFIG_ENABLE in the Compiler Options.
#define PIKA_BYTES_DEFAULT_SIZE 64 * To see more:
#define PIKA_ARG_ALIGN_ENABLE 1 * https://pikadoc.readthedocs.io/en/latest/%E4%BC%98%E5%8C%96%E5%86%85%E5%AD%98%E5%8D%A0%E7%94%A8%E3%80%81%E9%85%8D%E7%BD%AE%20libc.html
#define PIKA_METHOD_CACHE_ENABLE 0 */
#define PIKA_BUILTIN_LIST_ENABLE 0
#define PIKA_BUILTIN_DICT_ENABLE 0
#define PIKA_READ_FILE_BUFF_SIZE 0x10000
#define PIKA_INIT_STRING_ENABLE 0
#define PIKA_SYNTEX_ITEM_SLICE_ENABLE 1
#define PIKA_SYNTEX_ITEM_FORMAT_ENABLE 1
#define PIKA_PLOOC_ENABLE 0
#define PIKA_STD_DEVICE_UNIX_TIME_ENABLE 1
/* optimize options */ /* optimize options */
#define PIKA_OPTIMIZE_SIZE 0 #define PIKA_OPTIMIZE_SIZE 0
#define PIKA_OPTIMIZE_SPEED 1 #define PIKA_OPTIMIZE_SPEED 1
@ -53,50 +45,213 @@
#define PIKA_SYNTAX_LEVEL_MINIMAL 0 #define PIKA_SYNTAX_LEVEL_MINIMAL 0
#define PIKA_SYNTAX_LEVEL_MAXIMAL 1 #define PIKA_SYNTAX_LEVEL_MAXIMAL 1
/* default optimize */
#define PIKA_OPTIMIZE PIKA_OPTIMIZE_SIZE
/* default syntax support level */
#define PIKA_SYNTAX_LEVEL PIKA_SYNTAX_LEVEL_MAXIMAL
/* use user config */ /* use user config */
#ifdef PIKA_CONFIG_ENABLE #ifdef PIKA_CONFIG_ENABLE
#include "pika_config.h" #include "pika_config.h"
#endif #endif
/* config for size optimize */ /* default optimize */
#if PIKA_OPTIMIZE == PIKA_OPTIMIZE_SIZE #ifndef PIKA_OPTIMIZE
#undef PIKA_METHOD_CACHE_ENABLE #define PIKA_OPTIMIZE PIKA_OPTIMIZE_SIZE
#define PIKA_METHOD_CACHE_ENABLE 0 #endif
/* default syntax support level */
#ifndef PIKA_SYNTAX_LEVEL
#define PIKA_SYNTAX_LEVEL PIKA_SYNTAX_LEVEL_MAXIMAL
#endif
/* auto config for optimize */
#if PIKA_OPTIMIZE == PIKA_OPTIMIZE_SIZE
#ifndef PIKA_METHOD_CACHE_ENABLE
#define PIKA_METHOD_CACHE_ENABLE 0
#endif
/* config for speed optimize */
#elif PIKA_OPTIMIZE == PIKA_OPTIMIZE_SPEED #elif PIKA_OPTIMIZE == PIKA_OPTIMIZE_SPEED
#undef PIKA_METHOD_CACHE_ENABLE #ifndef PIKA_METHOD_CACHE_ENABLE
#define PIKA_METHOD_CACHE_ENABLE 1 #define PIKA_METHOD_CACHE_ENABLE 1
#endif
#endif #endif
/* config for syntax level */ /* auto config for syntax level */
#if PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MINIMAL #if PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MINIMAL
#undef PIKA_SYNTEX_ITEM_SLICE_ENABLE #ifndef PIKA_SYNTAX_SLICE_ENABLE
#define PIKA_SYNTEX_ITEM_SLICE_ENABLE 0 #define PIKA_SYNTAX_SLICE_ENABLE 0
#undef PIKA_BUILTIN_LIST_ENABLE #endif
#define PIKA_BUILTIN_LIST_ENABLE 0
#undef PIKA_BUILTIN_DICT_ENABLE #ifndef PIKA_BUILTIN_STRUCT_ENABLE
#define PIKA_BUILTIN_DICT_ENABLE 0 #define PIKA_BUILTIN_STRUCT_ENABLE 0
#undef PIKA_SYNTEX_ITEM_FORMAT_ENABLE #endif
#define PIKA_SYNTEX_ITEM_FORMAT_ENABLE 0
#undef PIKA_STD_DEVICE_UNIX_TIME_ENABLE #ifndef PIKA_SYNTAX_FORMAT_ENABLE
#define PIKA_STD_DEVICE_UNIX_TIME_ENABLE 0 #define PIKA_SYNTAX_FORMAT_ENABLE 0
#endif
#ifndef PIKA_STD_DEVICE_UNIX_TIME_ENABLE
#define PIKA_STD_DEVICE_UNIX_TIME_ENABLE 0
#endif
#ifndef PIKA_SYNTAX_EXCEPTION_ENABLE
#define PIKA_SYNTAX_EXCEPTION_ENABLE 0
#endif
#ifndef PIKA_SYNTAX_IMPORT_EX_ENABLE
#define PIKA_SYNTAX_IMPORT_EX_ENABLE 0
#endif
#ifndef PIKA_EVENT_ENABLE
#define PIKA_EVENT_ENABLE 0
#endif
#ifndef PIKA_FILEIO_ENABLE
#define PIKA_FILEIO_ENABLE 0
#endif
#elif PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL #elif PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL
#undef PIKA_SYNTEX_ITEM_SLICE_ENABLE #ifndef PIKA_SYNTAX_SLICE_ENABLE
#define PIKA_SYNTEX_ITEM_SLICE_ENABLE 1 #define PIKA_SYNTAX_SLICE_ENABLE 1
#undef PIKA_BUILTIN_LIST_ENABLE #endif
#define PIKA_BUILTIN_LIST_ENABLE 1
#undef PIKA_BUILTIN_DICT_ENABLE #ifndef PIKA_BUILTIN_STRUCT_ENABLE
#define PIKA_BUILTIN_DICT_ENABLE 1 #define PIKA_BUILTIN_STRUCT_ENABLE 1
#undef PIKA_SYNTEX_ITEM_FORMAT_ENABLE #endif
#define PIKA_SYNTEX_ITEM_FORMAT_ENABLE 1
#undef PIKA_STD_DEVICE_UNIX_TIME_ENABLE #ifndef PIKA_SYNTAX_FORMAT_ENABLE
#define PIKA_STD_DEVICE_UNIX_TIME_ENABLE 1 #define PIKA_SYNTAX_FORMAT_ENABLE 1
#endif
#ifndef PIKA_STD_DEVICE_UNIX_TIME_ENABLE
#define PIKA_STD_DEVICE_UNIX_TIME_ENABLE 1
#endif
#ifndef PIKA_SYNTAX_EXCEPTION_ENABLE
#define PIKA_SYNTAX_EXCEPTION_ENABLE 1
#endif
#ifndef PIKA_SYNTAX_IMPORT_EX_ENABLE
#define PIKA_SYNTAX_IMPORT_EX_ENABLE 1
#endif
#ifndef PIKA_EVENT_ENABLE
#define PIKA_EVENT_ENABLE 1
#endif
#ifndef PIKA_FILEIO_ENABLE
#define PIKA_FILEIO_ENABLE 1
#endif
#endif
/* default configuration */
#ifndef PIKA_LINE_BUFF_SIZE
#define PIKA_LINE_BUFF_SIZE 128
#endif
#ifndef PIKA_SPRINTF_BUFF_SIZE
#define PIKA_SPRINTF_BUFF_SIZE 256
#endif
#ifndef PIKA_STACK_BUFF_SIZE
#define PIKA_STACK_BUFF_SIZE 256
#endif
#ifndef PIKA_NAME_BUFF_SIZE
#define PIKA_NAME_BUFF_SIZE 32
#endif
#ifndef PIKA_PATH_BUFF_SIZE
#define PIKA_PATH_BUFF_SIZE 96
#endif
#ifndef PIKA_BYTES_DEFAULT_SIZE
#define PIKA_BYTES_DEFAULT_SIZE 64
#endif
#ifndef PIKA_ARG_ALIGN_ENABLE
#define PIKA_ARG_ALIGN_ENABLE 1
#endif
#ifndef PIKA_METHOD_CACHE_ENABLE
#define PIKA_METHOD_CACHE_ENABLE 0
#endif
#ifndef PIKA_BUILTIN_STRUCT_ENABLE
#define PIKA_BUILTIN_STRUCT_ENABLE 0
#endif
#ifndef PIKA_READ_FILE_BUFF_SIZE
#define PIKA_READ_FILE_BUFF_SIZE 0x1024 * 10
#endif
#ifndef PIKA_INIT_STRING_ENABLE
#define PIKA_INIT_STRING_ENABLE 1
#endif
#ifndef PIKA_SYNTAX_SLICE_ENABLE
#define PIKA_SYNTAX_SLICE_ENABLE 1
#endif
#ifndef PIKA_SYNTAX_FORMAT_ENABLE
#define PIKA_SYNTAX_FORMAT_ENABLE 1
#endif
#ifndef PIKA_SYNTAX_EXCEPTION_ENABLE
#define PIKA_SYNTAX_EXCEPTION_ENABLE 1
#endif
#ifndef PIKA_SYNTAX_IMPORT_EX_ENABLE
#define PIKA_SYNTAX_IMPORT_EX_ENABLE 1
#endif
#ifndef PIKA_PLOOC_ENABLE
#define PIKA_PLOOC_ENABLE 0
#endif
#ifndef PIKA_STD_DEVICE_UNIX_TIME_ENABLE
#define PIKA_STD_DEVICE_UNIX_TIME_ENABLE 1
#endif
#ifndef PIKA_POOL_ENABLE
#define PIKA_POOL_ENABLE 0
#endif
#ifndef PIKA_POOL_SIZE
#define PIKA_POOL_SIZE 0x4000
#endif
#ifndef PIKA_POOL_ALIGN
#define PIKA_POOL_ALIGN 8
#endif
#ifndef PIKA_ASSERT_ENABLE
#define PIKA_ASSERT_ENABLE 0
#endif
#ifndef PIKA_EVENT_ENABLE
#define PIKA_EVENT_ENABLE 1
#endif
#ifndef PIKA_DEBUG_ENABLE
#define PIKA_DEBUG_ENABLE 0
#endif
#ifndef PIKA_FILEIO_ENABLE
#define PIKA_FILEIO_ENABLE 1
#endif
#ifndef PIKA_ARG_NUM_MAX
#define PIKA_ARG_NUM_MAX 16
#endif
#ifndef PIKA_MATH_ENABLE
#define PIKA_MATH_ENABLE 0
#endif
#ifndef PIKA_REGIST_SIZE
#define PIKA_REGIST_SIZE 10
#endif
#ifndef PIKA_ARG_BUFF_SIZE
#define PIKA_ARG_BUFF_SIZE 8
#endif #endif
/* configuration validation */ /* configuration validation */

View File

@ -26,7 +26,7 @@ static enum shell_state __obj_shellLineHandler_debug(PikaObj* self,
/* print */ /* print */
if (strIsStartWith(input_line, "p ")) { if (strIsStartWith(input_line, "p ")) {
char* path = input_line + 2; char* path = input_line + 2;
Arg* asm_buff = arg_setStr(NULL, "", "B0\n1 REF "); Arg* asm_buff = arg_newStr("B0\n1 REF ");
asm_buff = arg_strAppend(asm_buff, path); asm_buff = arg_strAppend(asm_buff, path);
asm_buff = arg_strAppend(asm_buff, "\n0 RUN print\n"); asm_buff = arg_strAppend(asm_buff, "\n0 RUN print\n");
pikaVM_runAsm(__pikaMain, arg_getStr(asm_buff)); pikaVM_runAsm(__pikaMain, arg_getStr(asm_buff));

View File

@ -0,0 +1,71 @@
#include "PikaStdData_ByteArray.h"
void PikaStdData_ByteArray___init__(PikaObj* self, Arg* bytes) {
obj_setArg(self, "raw", bytes);
}
Arg* PikaStdData_ByteArray___iter__(PikaObj* self) {
obj_setInt(self, "__iter_i", 0);
return arg_newRef(self);
}
Arg* PikaStdData_ByteArray___next__(PikaObj* self) {
int __iter_i = args_getInt(self->list, "__iter_i");
uint8_t* data = obj_getBytes(self, "raw");
uint16_t len = obj_getBytesSize(self, "raw");
Arg* res = NULL;
char char_buff[] = " ";
if (__iter_i < len) {
char_buff[0] = data[__iter_i];
res = arg_newInt(char_buff[0]);
} else {
return arg_newNull();
}
args_setInt(self->list, "__iter_i", __iter_i + 1);
return res;
}
int PikaStdData_ByteArray___getitem__(PikaObj* self, int __key) {
uint8_t* data = obj_getBytes(self, "raw");
uint16_t len = obj_getBytesSize(self, "raw");
if (__key < len) {
return data[__key];
} else {
return 0;
}
}
void PikaStdData_ByteArray___setitem__(PikaObj* self, int __key, int __val) {
uint8_t* data = obj_getBytes(self, "raw");
uint16_t len = obj_getBytesSize(self, "raw");
if (__key < len) {
data[__key] = __val;
}
}
char* PikaStdData_ByteArray___str__(PikaObj* self) {
uint8_t* data = obj_getBytes(self, "raw");
uint16_t len = obj_getBytesSize(self, "raw");
Arg* str_arg = arg_newStr("");
str_arg = arg_strAppend(str_arg, "bytearray(b'");
for (int i = 0; i < len; i++) {
char u8_str[] = "\\x00";
uint8_t u8 = data[i];
__platform_sprintf(u8_str, "\\x%02x", u8);
str_arg = arg_strAppend(str_arg, u8_str);
}
str_arg = arg_strAppend(str_arg, "')");
obj_removeArg(self, "_buf");
obj_setStr(self, "_buf", arg_getStr(str_arg));
arg_deinit(str_arg);
return obj_getStr(self, "_buf");
}
char* PikaStdData_ByteArray_decode(PikaObj* self) {
uint8_t* data = obj_getBytes(self, "raw");
Arg* str_arg = arg_newStr((char*)data);
obj_removeArg(self, "_buf");
obj_setStr(self, "_buf", arg_getStr(str_arg));
arg_deinit(str_arg);
return obj_getStr(self, "_buf");
}

View File

@ -1,6 +1,9 @@
#include "PikaStdData_Dict.h"
#include "BaseObj.h" #include "BaseObj.h"
#include "PikaObj.h" #include "PikaObj.h"
#include "PikaStdData_dict_keys.h"
#include "PikaStdLib_SysObj.h" #include "PikaStdLib_SysObj.h"
#include "dataStrs.h"
Arg* PikaStdData_Dict_get(PikaObj* self, char* key) { Arg* PikaStdData_Dict_get(PikaObj* self, char* key) {
PikaDict* dict = obj_getPtr(self, "dict"); PikaDict* dict = obj_getPtr(self, "dict");
@ -8,47 +11,145 @@ Arg* PikaStdData_Dict_get(PikaObj* self, char* key) {
} }
void PikaStdData_Dict___init__(PikaObj* self) { void PikaStdData_Dict___init__(PikaObj* self) {
PikaDict* dict = New_dict(); __vm_Dict___init__(self);
obj_setPtr(self, "dict", dict);
} }
void PikaStdData_Dict_set(PikaObj* self, Arg* arg, char* key) { void PikaStdData_Dict_set(PikaObj* self, char* key, Arg* arg) {
PikaDict* dict = obj_getPtr(self, "dict"); __vm_Dict_set(self, arg, key);
arg_setName(arg, key);
dict_setArg(dict, arg_copy(arg));
} }
void PikaStdData_Dict_remove(PikaObj* self, char* key) { void PikaStdData_Dict_remove(PikaObj* self, char* key) {
PikaDict* dict = obj_getPtr(self, "dict"); PikaDict* dict = obj_getPtr(self, "dict");
PikaDict* keys = obj_getPtr(self, "_keys");
dict_removeArg(dict, dict_getArg(dict, key)); dict_removeArg(dict, dict_getArg(dict, key));
dict_removeArg(keys, dict_getArg(keys, key));
} }
Arg* PikaStdData_Dict___iter__(PikaObj* self) { Arg* PikaStdData_Dict___iter__(PikaObj* self) {
obj_setInt(self, "__iter_i", 0); obj_setInt(self, "__iter_i", 0);
return arg_setRef(NULL, "", self); return arg_newRef(self);
} }
Arg* PikaStdData_Dict___next__(PikaObj* self) { Arg* PikaStdData_Dict___next__(PikaObj* self) {
int __iter_i = args_getInt(self->list, "__iter_i"); int __iter_i = args_getInt(self->list, "__iter_i");
PikaDict* dict = obj_getPtr(self, "dict"); PikaDict* keys = obj_getPtr(self, "_keys");
Arg* res = arg_copy(args_getArgByidex(&dict->super, __iter_i)); Arg* res = arg_copy(args_getArgByidex(&keys->super, __iter_i));
if (NULL == res) { if (NULL == res) {
return arg_setNull(NULL); return arg_newNull();
} }
args_setInt(self->list, "__iter_i", __iter_i + 1); args_setInt(self->list, "__iter_i", __iter_i + 1);
return res; return res;
} }
void PikaStdData_Dict___setitem__(PikaObj* self) { void PikaStdData_Dict___setitem__(PikaObj* self, Arg* __key, Arg* __val) {
PikaStdData_Dict_set(self, obj_getArg(self, "__val"), PikaStdData_Dict_set(self, obj_getStr(self, "__key"),
obj_getStr(self, "__key")); obj_getArg(self, "__val"));
} }
Arg* PikaStdData_Dict___getitem__(PikaObj* self) { Arg* PikaStdData_Dict___getitem__(PikaObj* self, Arg* __key) {
return PikaStdData_Dict_get(self, obj_getStr(self, "__key")); return PikaStdData_Dict_get(self, obj_getStr(self, "__key"));
} }
void PikaStdData_Dict___del__(PikaObj* self) { void PikaStdData_Dict___del__(PikaObj* self) {
PikaDict* dict = obj_getPtr(self, "dict"); PikaDict* dict = obj_getPtr(self, "dict");
PikaDict* keys = obj_getPtr(self, "_keys");
dict_deinit(dict); dict_deinit(dict);
dict_deinit(keys);
}
void PikaStdData_dict_keys___init__(PikaObj* self, PikaObj* dict) {
obj_setPtr(self, "dictptr", dict);
}
PikaObj* PikaStdData_Dict_keys(PikaObj* self) {
PikaObj* dict_keys = newNormalObj(New_PikaStdData_dict_keys);
PikaStdData_dict_keys___init__(dict_keys, self);
return dict_keys;
}
Arg* PikaStdData_dict_keys___iter__(PikaObj* self) {
obj_setInt(self, "__iter_i", 0);
return arg_newRef(self);
}
Arg* PikaStdData_dict_keys___next__(PikaObj* self) {
int __iter_i = args_getInt(self->list, "__iter_i");
PikaObj* dictptr = obj_getPtr(self, "dictptr");
PikaDict* keys = obj_getPtr(dictptr, "_keys");
Arg* res = arg_copy(args_getArgByidex(&keys->super, __iter_i));
if (NULL == res) {
return arg_newNull();
}
args_setInt(self->list, "__iter_i", __iter_i + 1);
return res;
}
char* PikaStdLib_SysObj_str(PikaObj* self, Arg* arg);
char* PikaStdData_dict_keys___str__(PikaObj* self) {
Arg* str_arg = arg_newStr("dict_keys([");
PikaObj* dictptr = obj_getPtr(self, "dictptr");
PikaDict* keys = obj_getPtr(dictptr, "_keys");
int i = 0;
while (PIKA_TRUE) {
Arg* item = args_getArgByidex(&keys->super, i);
if (NULL == item) {
break;
}
if (i != 0) {
str_arg = arg_strAppend(str_arg, ", ");
}
char* item_str = PikaStdLib_SysObj_str(self, item);
str_arg = arg_strAppend(str_arg, item_str);
i++;
}
str_arg = arg_strAppend(str_arg, "])");
obj_setStr(self, "_buf", arg_getStr(str_arg));
arg_deinit(str_arg);
return obj_getStr(self, "_buf");
}
char* PikaStdData_Dict___str__(PikaObj* self) {
Arg* str_arg = arg_newStr("{");
PikaDict* keys = obj_getPtr(self, "_keys");
PikaDict* dict = obj_getPtr(self, "dict");
int i = 0;
while (PIKA_TRUE) {
Arg* item_key = args_getArgByidex(&keys->super, i);
Arg* item_val = args_getArgByidex(&dict->super, i);
if (NULL == item_key) {
break;
}
if (i != 0) {
str_arg = arg_strAppend(str_arg, ", ");
}
char* key_str = PikaStdLib_SysObj_str(self, item_key);
str_arg = arg_strAppend(str_arg, "'");
str_arg = arg_strAppend(str_arg, key_str);
str_arg = arg_strAppend(str_arg, "'");
str_arg = arg_strAppend(str_arg, ": ");
char* val_str = PikaStdLib_SysObj_str(self, item_val);
str_arg = arg_strAppend(str_arg, val_str);
i++;
}
str_arg = arg_strAppend(str_arg, "}");
obj_setStr(self, "_buf", arg_getStr(str_arg));
arg_deinit(str_arg);
return obj_getStr(self, "_buf");
}
int PikaStdData_Dict___len__(PikaObj* self) {
PikaDict* dict = obj_getPtr(self, "dict");
return args_getSize(&dict->super);
}
int PikaStdData_dict_keys___len__(PikaObj* self) {
PikaObj* dictptr = obj_getPtr(self, "dictptr");
PikaDict* keys = obj_getPtr(dictptr, "_keys");
return args_getSize(&keys->super);
} }

View File

@ -0,0 +1,177 @@
#include "PikaStdData_FILEIO.h"
#include <stdio.h>
#include "PikaStdData_List.h"
void PikaStdData_FILEIO_init(PikaObj* self, char* mode, char* path) {
if (obj_isArgExist(self, "_f")) {
/* already initialized */
return;
}
FILE* f = __platform_fopen(path, mode);
if (f == NULL) {
printf("Error: can't open file %s\n", path);
return;
}
obj_setPtr(self, "_f", f);
obj_setStr(self, "_mode", mode);
}
void PikaStdData_FILEIO_close(PikaObj* self) {
FILE* f = obj_getPtr(self, "_f");
if (f == NULL) {
return;
}
__platform_fclose(f);
obj_setPtr(self, "_f", NULL);
}
Arg* PikaStdData_FILEIO_read(PikaObj* self, int size) {
if (size <= 0) {
/* read all */
size = PIKA_READ_FILE_BUFF_SIZE;
}
FILE* f = obj_getPtr(self, "_f");
if (f == NULL) {
return NULL;
}
Arg* buf_arg = arg_newBytes(NULL, size);
uint8_t* buf = arg_getBytes(buf_arg);
/* read */
int n = __platform_fread(buf, 1, size, f);
if (n < size) {
/* EOF */
buf[n] = '\0';
}
char* mode = obj_getStr(self, "_mode");
if (strIsContain(mode, 'b')) {
/* binary */
Arg* res = arg_newBytes(buf, n);
arg_deinit(buf_arg);
return res;
} else {
/* text */
Arg* res = arg_newStr((char*)buf);
arg_deinit(buf_arg);
return res;
}
}
int PikaStdData_FILEIO_write(PikaObj* self, Arg* s) {
FILE* f = obj_getPtr(self, "_f");
int res = -1;
if (f == NULL) {
obj_setErrorCode(self, PIKA_RES_ERR_IO);
__platform_printf("Error: can't write to file\n");
return res;
}
char* mode = obj_getStr(self, "_mode");
if (strIsContain(mode, 'b')) {
/* binary */
res = __platform_fwrite(arg_getBytes(s), 1, arg_getSize(s), f);
} else {
/* text */
char* str = arg_getStr(s);
res = __platform_fwrite(str, 1, strlen(str), f);
}
return res;
}
int PikaStdData_FILEIO_seek(PikaObj *self, int offset, PikaTuple* fromwhere){
FILE* f = obj_getPtr(self, "_f");
if (f == NULL) {
obj_setErrorCode(self, PIKA_RES_ERR_IO);
__platform_printf("Error: can't seek in file\n");
return -1;
}
if (tuple_getSize(fromwhere) == 1) {
int whence = tuple_getInt(fromwhere, 0);
__platform_fseek(f, offset, whence);
return __platform_ftell(f);
}
__platform_fseek(f, offset, 0);
return __platform_ftell(f);
}
int PikaStdData_FILEIO_tell(PikaObj* self) {
FILE* f = obj_getPtr(self, "_f");
if (f == NULL) {
obj_setErrorCode(self, PIKA_RES_ERR_IO);
__platform_printf("Error: can't tell in file\n");
return -1;
}
return __platform_ftell(f);
}
char* PikaStdData_FILEIO_readline(PikaObj* self) {
FILE* f = obj_getPtr(self, "_f");
if (f == NULL) {
obj_setErrorCode(self, PIKA_RES_ERR_IO);
__platform_printf("Error: can't read line from file\n");
return NULL;
}
obj_setBytes(self, "_line_buff", NULL, PIKA_LINE_BUFF_SIZE);
char* line_buff = (char*)obj_getBytes(self, "_line_buff");
while (1) {
char char_buff[2] = {0};
int n = __platform_fread(char_buff, 1, 1, f);
if (n == 0) {
/* EOF */
return NULL;
}
if (char_buff[0] == '\n') {
/* end of line */
strAppend(line_buff, char_buff);
return line_buff;
}
if (strGetSize(line_buff) >= PIKA_LINE_BUFF_SIZE) {
/* line too long */
obj_setErrorCode(self, PIKA_RES_ERR_IO);
__platform_printf("Error: line too long\n");
return NULL;
}
strAppend(line_buff, char_buff);
}
}
PikaObj* PikaStdData_FILEIO_readlines(PikaObj* self) {
FILE* f = obj_getPtr(self, "_f");
if (f == NULL) {
obj_setErrorCode(self, PIKA_RES_ERR_IO);
__platform_printf("Error: can't read lines from file\n");
return NULL;
}
PikaObj* line_list = newNormalObj(New_PikaStdData_List);
PikaStdData_List___init__(line_list);
while (1) {
char* line = PikaStdData_FILEIO_readline(self);
if (line == NULL) {
break;
}
Arg* arg_str = arg_newStr(line);
PikaStdData_List_append(line_list, arg_str);
arg_deinit(arg_str);
}
return line_list;
}
void PikaStdData_FILEIO_writelines(PikaObj* self, PikaObj* lines) {
FILE* f = obj_getPtr(self, "_f");
if (f == NULL) {
obj_setErrorCode(self, PIKA_RES_ERR_IO);
__platform_printf("Error: can't write lines to file\n");
return;
}
PikaList* list = obj_getPtr(lines, "list");
if (list == NULL) {
obj_setErrorCode(self, PIKA_RES_ERR_IO);
__platform_printf("Error: can't write lines to file\n");
return;
}
for (size_t i = 0; i < list_getSize(list); i++) {
char* line = list_getStr(list, i);
Arg* arg_str = arg_newStr(line);
PikaStdData_FILEIO_write(self, arg_str);
arg_deinit(arg_str);
}
return;
}

View File

@ -1,29 +1,14 @@
#include "PikaStdData_List.h"
#include "BaseObj.h" #include "BaseObj.h"
#include "PikaObj.h" #include "PikaObj.h"
#include "PikaStdData_Tuple.h"
#include "dataStrs.h"
void PikaStdData_List_append(PikaObj* self, Arg* arg) { void PikaStdData_List_append(PikaObj* self, Arg* arg) {
PikaList* list = obj_getPtr(self, "list"); __vm_List_append(self, arg);
list_append(list, arg);
} }
int PikaStdData_List_len(PikaObj* self) { void PikaStdData_List_set(PikaObj* self, int i, Arg* arg) {
PikaList* list = obj_getPtr(self, "list");
return list_getSize(list);
}
Arg* PikaStdData_List_get(PikaObj* self, int i) {
PikaList* list = obj_getPtr(self, "list");
return arg_copy(list_getArg(list, i));
}
void PikaStdData_List___init__(PikaObj* self) {
if (!obj_isArgExist(self, "list")) {
PikaList* list = New_list();
obj_setPtr(self, "list", list);
}
}
void PikaStdData_List_set(PikaObj* self, Arg* arg, int i) {
PikaList* list = obj_getPtr(self, "list"); PikaList* list = obj_getPtr(self, "list");
if (PIKA_RES_OK != list_setArg(list, i, arg)) { if (PIKA_RES_OK != list_setArg(list, i, arg)) {
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
@ -31,52 +16,36 @@ void PikaStdData_List_set(PikaObj* self, Arg* arg, int i) {
} }
} }
Arg* PikaStdData_List___iter__(PikaObj* self) { void PikaStdData_List___setitem__(PikaObj* self, Arg* __key, Arg* __val) {
obj_setInt(self, "__iter_i", 0); PikaStdData_List_set(self, obj_getInt(self, "__key"),
return arg_setRef(NULL, "", self); obj_getArg(self, "__val"));
} }
Arg* PikaStdData_List___next__(PikaObj* self) { void PikaStdData_List___init__(PikaObj* self) {
int __iter_i = args_getInt(self->list, "__iter_i"); __vm_List___init__(self);
Arg* res = PikaStdData_List_get(self, __iter_i); }
if (NULL == res) {
return arg_setNull(NULL); char* PikaStdLib_SysObj_str(PikaObj* self, Arg* arg);
char* PikaStdData_List___str__(PikaObj* self) {
Arg* str_arg = arg_newStr("[");
PikaList* list = obj_getPtr(self, "list");
int i = 0;
while (PIKA_TRUE) {
Arg* item = list_getArg(list, i);
if (NULL == item) {
break;
}
if (i != 0) {
str_arg = arg_strAppend(str_arg, ", ");
}
char* item_str = PikaStdLib_SysObj_str(self, item);
str_arg = arg_strAppend(str_arg, item_str);
i++;
} }
args_setInt(self->list, "__iter_i", __iter_i + 1);
return res;
}
Arg* PikaStdData_List___getitem__(PikaObj* self) { str_arg = arg_strAppend(str_arg, "]");
return PikaStdData_List_get(self, obj_getInt(self, "__key")); obj_setStr(self, "_buf", arg_getStr(str_arg));
} arg_deinit(str_arg);
return obj_getStr(self, "_buf");
void PikaStdData_List___setitem__(PikaObj* self) {
PikaStdData_List_set(self, obj_getArg(self, "__val"),
obj_getInt(self, "__key"));
}
void PikaStdData_ByteArray_fromString(PikaObj* self, char* s) {
for (uint32_t i = 0; i < strGetSize(s); i++) {
obj_setInt(self, "__val", (int)s[i]);
PIKA_PYTHON_BEGIN
/* clang-format off */
PIKA_PYTHON(
append(__val)
)
/* clang-format on */
const uint8_t bytes[] = {
0x08, 0x00, /* instruct array size */
0x10, 0x81, 0x01, 0x00, 0x00, 0x02, 0x07, 0x00, /* instruct array */
0x0e, 0x00, /* const pool size */
0x00, 0x5f, 0x5f, 0x76, 0x61, 0x6c, 0x00, 0x61,
0x70, 0x70, 0x65, 0x6e, 0x64, 0x00, /* const pool */
};
pikaVM_runByteCode(self, (uint8_t*)bytes);
PIKA_PYTHON_END
}
}
void PikaStdData_List___del__(PikaObj* self) {
Args* list = obj_getPtr(self, "list");
args_deinit(list);
} }

View File

@ -1,9 +1,11 @@
#include "PikaStdData_String.h" #include "PikaStdData_String.h"
#include "PikaStdData_List.h"
#include "PikaStdData_String_Util.h" #include "PikaStdData_String_Util.h"
#include "dataStrs.h"
Arg* PikaStdData_String___iter__(PikaObj* self) { Arg* PikaStdData_String___iter__(PikaObj* self) {
obj_setInt(self, "__iter_i", 0); obj_setInt(self, "__iter_i", 0);
return arg_setRef(NULL, "", self); return arg_newRef(self);
} }
void PikaStdData_String_set(PikaObj* self, char* s) { void PikaStdData_String_set(PikaObj* self, char* s) {
@ -26,9 +28,9 @@ Arg* PikaStdData_String___next__(PikaObj* self) {
char char_buff[] = " "; char char_buff[] = " ";
if (__iter_i < len) { if (__iter_i < len) {
char_buff[0] = str[__iter_i]; char_buff[0] = str[__iter_i];
res = arg_setStr(NULL, "", (char*)char_buff); res = arg_newStr((char*)char_buff);
} else { } else {
return arg_setNull(NULL); return arg_newNull();
} }
args_setInt(self->list, "__iter_i", __iter_i + 1); args_setInt(self->list, "__iter_i", __iter_i + 1);
return res; return res;
@ -41,9 +43,9 @@ Arg* PikaStdData_String___getitem__(PikaObj* self, Arg* __key) {
char char_buff[] = " "; char char_buff[] = " ";
if (key_i < len) { if (key_i < len) {
char_buff[0] = str[key_i]; char_buff[0] = str[key_i];
return arg_setStr(NULL, "", (char*)char_buff); return arg_newStr((char*)char_buff);
} else { } else {
return arg_setNull(NULL); return arg_newNull();
} }
} }
@ -64,12 +66,12 @@ char* PikaStdData_String___str__(PikaObj* self) {
return obj_getStr(self, "str"); return obj_getStr(self, "str");
} }
int PikaStdData_String_startwith(PikaObj *self, char* prefix){ int PikaStdData_String_startwith(PikaObj* self, char* prefix) {
char *str = obj_getStr(self,"str"); char* str = obj_getStr(self, "str");
char *p = prefix; char* p = prefix;
int i=0; int i = 0;
while(*p!='\0'){ while (*p != '\0') {
if(*p!=str[i]) if (*p != str[i])
return 0; return 0;
p++; p++;
i++; i++;
@ -77,12 +79,12 @@ int PikaStdData_String_startwith(PikaObj *self, char* prefix){
return 1; return 1;
} }
int PikaStdData_String_endwith(PikaObj *self, char* suffix){ int PikaStdData_String_endwith(PikaObj* self, char* suffix) {
char *str = obj_getStr(self,"str"); char* str = obj_getStr(self, "str");
int len1=strlen(str); int len1 = strlen(str);
int len2=strlen(suffix); int len2 = strlen(suffix);
while(len2>=1){ while (len2 >= 1) {
if(suffix[len2-1]!=str[len1-1]) if (suffix[len2 - 1] != str[len1 - 1])
return 0; return 0;
len2--; len2--;
len1--; len1--;
@ -90,57 +92,127 @@ int PikaStdData_String_endwith(PikaObj *self, char* suffix){
return 1; return 1;
} }
int PikaStdData_String_isdigit(PikaObj *self){ int PikaStdData_String_isdigit(PikaObj* self) {
char *str = obj_getStr(self,"str"); char* str = obj_getStr(self, "str");
int i=0; int i = 0;
while(str[i]!='\0'){ while (str[i] != '\0') {
if(!isdigit((int)str[i])) if (!isdigit((int)str[i]))
return 0; return 0;
i++; i++;
} }
return 1; return 1;
} }
int PikaStdData_String_islower(PikaObj *self){ int PikaStdData_String_islower(PikaObj* self) {
char *str = obj_getStr(self,"str"); char* str = obj_getStr(self, "str");
int i=0; int i = 0;
while(str[i]!='\0'){ while (str[i] != '\0') {
if(!islower((int)str[i])) if (!islower((int)str[i]))
return 0; return 0;
i++; i++;
} }
return 1; return 1;
} }
int PikaStdData_String_isalnum(PikaObj *self){ int PikaStdData_String_isalnum(PikaObj* self) {
char *str = obj_getStr(self,"str"); char* str = obj_getStr(self, "str");
int i=0; int i = 0;
while(str[i]!='\0'){ while (str[i] != '\0') {
if(!isalnum((int)str[i])) if (!isalnum((int)str[i]))
return 0; return 0;
i++; i++;
} }
return 1; return 1;
} }
int PikaStdData_String_isalpha(PikaObj *self){ int PikaStdData_String_isalpha(PikaObj* self) {
char *str = obj_getStr(self,"str"); char* str = obj_getStr(self, "str");
int i=0; int i = 0;
while(str[i]!='\0'){ while (str[i] != '\0') {
if(!isalpha((int)str[i])) if (!isalpha((int)str[i]))
return 0; return 0;
i++; i++;
} }
return 1; return 1;
} }
int PikaStdData_String_isspace(PikaObj *self){ int PikaStdData_String_isspace(PikaObj* self) {
char *str = obj_getStr(self,"str"); char* str = obj_getStr(self, "str");
int i=0; int i = 0;
while(str[i]!='\0'){ while (str[i] != '\0') {
if(!isspace((int)str[i])) if (!isspace((int)str[i]))
return 0; return 0;
i++; i++;
} }
return 1; return 1;
} }
PikaObj* PikaStdData_String_split(PikaObj* self, char* s) {
/* 创建 list 对象 */
PikaObj* list = newNormalObj(New_PikaStdData_List);
/* 初始化 list */
PikaStdData_List___init__(list);
Args buffs = {0};
char* str = strsCopy(&buffs, obj_getStr(self, "str"));
char sign = s[0];
int token_num = strCountSign(str, sign) + 1;
for (int i = 0; i < token_num; i++) {
char* token = strsPopToken(&buffs, str, sign);
/* 用 arg_set<type> 的 api 创建 arg */
Arg* token_arg = arg_newStr(token);
/* 添加到 list 对象 */
PikaStdData_List_append(list, token_arg);
/* 销毁 arg */
arg_deinit(token_arg);
}
strsDeinit(&buffs);
return list;
}
int PikaStdData_String___len__(PikaObj* self) {
char* str = obj_getStr(self, "str");
return strGetSize(str);
}
char* PikaStdData_String_strip(PikaObj* self) {
Args buffs = {0};
char* str = strsCopy(&buffs, obj_getStr(self, "str"));
/* strip */
char* str_start = str;
for (size_t i = 0; i < strGetSize(str); i++) {
if (str[i] != ' ') {
str_start = (char*)(str + i);
break;
}
}
for (int i = strGetSize(str) - 1; i >= 0; i--) {
if (str[i] != ' ') {
str[i + 1] = '\0';
break;
}
}
obj_setStr(self, "_buf", str_start);
strsDeinit(&buffs);
return obj_getStr(self, "_buf");
}
char* PikaStdData_String_replace(PikaObj* self, char* old, char* new) {
Args buffs = {0};
char* str = strsCopy(&buffs, obj_getStr(self, "str"));
str = strsReplace(&buffs, str, old, new);
obj_setStr(self, "_buf", str);
strsDeinit(&buffs);
return obj_getStr(self, "_buf");
}
Arg* PikaStdData_String_encode(PikaObj* self) {
char* str = obj_getStr(self, "str");
Arg* arg = arg_newBytes((uint8_t*)str, strGetSize(str));
return arg;
}

View File

@ -1 +1 @@
#include<ctype.h> #include<ctype.h>

View File

@ -0,0 +1,70 @@
#include "PikaStdData_Tuple.h"
#include "PikaVM.h"
#include "dataStrs.h"
int PikaStdData_Tuple_len(PikaObj* self) {
PikaList* list = obj_getPtr(self, "list");
return list_getSize(list);
}
Arg* PikaStdData_Tuple_get(PikaObj* self, int i) {
PikaList* list = obj_getPtr(self, "list");
return arg_copy(list_getArg(list, i));
}
void PikaStdData_Tuple___init__(PikaObj* self) {
__vm_List___init__(self);
}
Arg* PikaStdData_Tuple___iter__(PikaObj* self) {
obj_setInt(self, "__iter_i", 0);
return arg_newRef(self);
}
Arg* PikaStdData_Tuple___next__(PikaObj* self) {
int __iter_i = args_getInt(self->list, "__iter_i");
Arg* res = PikaStdData_Tuple_get(self, __iter_i);
if (NULL == res) {
return arg_newNull();
}
args_setInt(self->list, "__iter_i", __iter_i + 1);
return res;
}
Arg* PikaStdData_Tuple___getitem__(PikaObj* self, Arg* __key) {
return PikaStdData_Tuple_get(self, obj_getInt(self, "__key"));
}
void PikaStdData_Tuple___del__(PikaObj* self) {
Args* list = obj_getPtr(self, "list");
args_deinit(list);
}
char* PikaStdLib_SysObj_str(PikaObj* self, Arg* arg);
char* PikaStdData_Tuple___str__(PikaObj* self) {
Arg* str_arg = arg_newStr("(");
PikaList* list = obj_getPtr(self, "list");
int i = 0;
while (PIKA_TRUE) {
Arg* item = list_getArg(list, i);
if (NULL == item) {
break;
}
if (i != 0) {
str_arg = arg_strAppend(str_arg, ", ");
}
char* item_str = PikaStdLib_SysObj_str(self, item);
str_arg = arg_strAppend(str_arg, item_str);
i++;
}
str_arg = arg_strAppend(str_arg, ")");
obj_setStr(self, "_buf", arg_getStr(str_arg));
arg_deinit(str_arg);
return obj_getStr(self, "_buf");
}
int PikaStdData_Tuple___len__(PikaObj* self) {
return PikaStdData_Tuple_len(self);
}

View File

@ -1,4 +1,5 @@
#include "PikaStdData_Utils.h" #include "PikaStdData_Utils.h"
#include "dataStrs.h"
Arg* PikaStdData_Utils_int_to_bytes(PikaObj* self, int val) { Arg* PikaStdData_Utils_int_to_bytes(PikaObj* self, int val) {
if (val > 0xFF) { if (val > 0xFF) {
@ -6,8 +7,8 @@ Arg* PikaStdData_Utils_int_to_bytes(PikaObj* self, int val) {
__platform_printf( __platform_printf(
"OverflowError: cannot convert value larger than 0xFF to " "OverflowError: cannot convert value larger than 0xFF to "
"bytes\r\n"); "bytes\r\n");
return arg_setNull(NULL); return arg_newNull();
} }
uint8_t val_bytes = (uint8_t)val; uint8_t val_bytes = (uint8_t)val;
return arg_setBytes(NULL, "", &val_bytes, 1); return arg_newBytes(&val_bytes, 1);
} }

View File

@ -17,8 +17,8 @@ Arg* PikaStdLib_RangeObj___next__(PikaObj* self) {
} }
/* exit */ /* exit */
if (iter_i >= end) { if (iter_i >= end) {
return arg_setNull(NULL); return arg_newNull();
} }
args_setInt(self->list, "iter_i", iter_i + foot); args_setInt(self->list, "iter_i", iter_i + foot);
return arg_setInt(NULL, "", iter_i); return arg_newInt(iter_i);
} }

View File

@ -1,5 +1,5 @@
#include "PikaObj.h" #include "PikaObj.h"
Arg* PikaStdLib_StringObj___next__(PikaObj* self) { Arg* PikaStdLib_StringObj___next__(PikaObj* self) {
return arg_setNull(NULL); return arg_newNull();
} }

View File

@ -1,4 +1,5 @@
#include "PikaStdLib_SysObj.h" #include "PikaStdLib_SysObj.h"
#include "PikaStdData_FILEIO.h"
#include "PikaStdLib_RangeObj.h" #include "PikaStdLib_RangeObj.h"
#include "PikaStdLib_StringObj.h" #include "PikaStdLib_StringObj.h"
#include "PikaVM.h" #include "PikaVM.h"
@ -19,49 +20,55 @@ void PikaStdLib_SysObj_remove(PikaObj* self, char* argPath) {
} }
} }
void PikaStdLib_SysObj_type(PikaObj* self, Arg* arg) { Arg* PikaStdLib_SysObj_type(PikaObj* self, Arg* arg) {
if (NULL == arg) { if (NULL == arg) {
obj_setSysOut(self, "[error] type: arg no found."); obj_setSysOut(self, "[error] type: arg no found.");
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
return; return arg_newNull();
} }
ArgType type = arg_getType(arg); ArgType type = arg_getType(arg);
if (ARG_TYPE_INT == type) { if (ARG_TYPE_INT == type) {
obj_setSysOut(self, "<class 'int'>"); return arg_newStr("<class 'int'>");
return;
} }
if (ARG_TYPE_FLOAT == type) { if (ARG_TYPE_FLOAT == type) {
obj_setSysOut(self, "<class 'float'>"); return arg_newStr("<class 'float'>");
return;
} }
if (ARG_TYPE_STRING == type) { if (ARG_TYPE_STRING == type) {
obj_setSysOut(self, "<class 'str'>"); return arg_newStr("<class 'str'>");
return;
} }
if (ARG_TYPE_OBJECT == type) { if (argType_isObject(type)) {
obj_setSysOut(self, "<class 'object'>"); PikaObj* obj = arg_getPtr(arg);
return; NewFun clsptr = obj_getClass(obj);
PikaObj* New_PikaStdData_List(Args * args);
if (clsptr == New_PikaStdData_List) {
return arg_newStr("<class 'list'>");
}
/* dict */
PikaObj* New_PikaStdData_Dict(Args * args);
if (clsptr == New_PikaStdData_Dict) {
return arg_newStr("<class 'dict'>");
}
return arg_newStr("<class 'object'>");
} }
if (ARG_TYPE_OBJECT_META == type) { if (ARG_TYPE_OBJECT_META == type) {
obj_setSysOut(self, "<class 'meta object'>"); return arg_newStr("<class 'meta object'>");
return;
} }
if (ARG_TYPE_BYTES == type) { if (ARG_TYPE_BYTES == type) {
obj_setSysOut(self, "<class 'bytes'>"); return arg_newStr("<class 'bytes'>");
return;
} }
if (ARG_TYPE_METHOD_NATIVE == type) { if (ARG_TYPE_METHOD_NATIVE == type) {
obj_setSysOut(self, "<class 'buitin_function_or_method'>"); return arg_newStr("<class 'buitin_function_or_method'>");
return;
} }
if (ARG_TYPE_METHOD_OBJECT == type) { if (ARG_TYPE_METHOD_OBJECT == type) {
obj_setSysOut(self, "<class 'method'>"); return arg_newStr("<class 'method'>");
return;
} }
if (ARG_TYPE_METHOD_STATIC == type) { if (ARG_TYPE_METHOD_STATIC == type) {
obj_setSysOut(self, "<class 'function'>"); return arg_newStr("<class 'function'>");
return;
} }
if (ARG_TYPE_NONE == type) {
return arg_newStr("<class 'NoneType'>");
}
return arg_newNull();
} }
double PikaStdLib_SysObj_float(PikaObj* self, Arg* arg) { double PikaStdLib_SysObj_float(PikaObj* self, Arg* arg) {
@ -104,9 +111,10 @@ int PikaStdLib_SysObj_int(PikaObj* self, Arg* arg) {
} }
char* PikaStdLib_SysObj_str(PikaObj* self, Arg* arg) { char* PikaStdLib_SysObj_str(PikaObj* self, Arg* arg) {
obj_removeArg(self, "__buf");
ArgType type = arg_getType(arg); ArgType type = arg_getType(arg);
Args buffs = {0}; Args buffs = {0};
char* res = NULL; char* res = "";
if (ARG_TYPE_INT == type) { if (ARG_TYPE_INT == type) {
int val = arg_getInt(arg); int val = arg_getInt(arg);
res = strsFormat(&buffs, 11, "%d", val); res = strsFormat(&buffs, 11, "%d", val);
@ -121,6 +129,12 @@ char* PikaStdLib_SysObj_str(PikaObj* self, Arg* arg) {
res = (char*)arg_getBytes(arg); res = (char*)arg_getBytes(arg);
goto exit; goto exit;
} }
if (ARG_TYPE_STRING == type) {
res = arg_getStr(arg);
}
if (ARG_TYPE_NONE == type) {
res = "None";
}
if (argType_isObject(type)) { if (argType_isObject(type)) {
res = obj_toStr(arg_getPtr(arg)); res = obj_toStr(arg_getPtr(arg));
if (NULL != res) { if (NULL != res) {
@ -146,7 +160,7 @@ Arg* PikaStdLib_SysObj_iter(PikaObj* self, Arg* arg) {
/* object */ /* object */
if (argType_isObject(arg_getType(arg))) { if (argType_isObject(arg_getType(arg))) {
PikaObj* arg_obj = arg_getPtr(arg); PikaObj* arg_obj = arg_getPtr(arg);
NewFun _clsptr = obj_getPtr(arg_obj, "_clsptr"); NewFun _clsptr = (NewFun)arg_obj->constructor;
if (_clsptr == New_PikaStdLib_RangeObj) { if (_clsptr == New_PikaStdLib_RangeObj) {
/* found RangeObj, return directly */ /* found RangeObj, return directly */
return arg_copy(arg); return arg_copy(arg);
@ -167,7 +181,7 @@ Arg* PikaStdLib_SysObj_iter(PikaObj* self, Arg* arg) {
obj_removeArg(arg_obj, "__res"); obj_removeArg(arg_obj, "__res");
return res; return res;
} }
return arg_setNull(NULL); return arg_newNull();
} }
Arg* PikaStdLib_SysObj_range(PikaObj* self, int a1, int a2) { Arg* PikaStdLib_SysObj_range(PikaObj* self, int a1, int a2) {
@ -178,96 +192,61 @@ Arg* PikaStdLib_SysObj_range(PikaObj* self, int a1, int a2) {
return obj_arg; return obj_arg;
} }
Arg* PikaStdLib_SysObj___getitem__(PikaObj* self, Arg* key, Arg* obj) { Arg* PikaStdLib_SysObj___getitem__(PikaObj* self, Arg* obj, Arg* key) {
ArgType obj_type = arg_getType(obj); return __vm_get(self, key, obj);
int index = 0;
if (ARG_TYPE_INT == arg_getType(key)) {
index = arg_getInt(key);
}
if (ARG_TYPE_STRING == obj_type) {
char* str_pyload = arg_getStr(obj);
char char_buff[] = " ";
if (index < 0) {
index = strGetSize(str_pyload) + index;
}
char_buff[0] = str_pyload[index];
return arg_setStr(NULL, "", char_buff);
}
if (ARG_TYPE_BYTES == obj_type) {
uint8_t* bytes_pyload = arg_getBytes(obj);
uint8_t byte_buff[] = " ";
if (index < 0) {
index = arg_getBytesSize(obj) + index;
}
byte_buff[0] = bytes_pyload[index];
return arg_setBytes(NULL, "", byte_buff, 1);
}
if (argType_isObject(obj_type)) {
PikaObj* arg_obj = arg_getPtr(obj);
obj_setArg(arg_obj, "__key", key);
// pikaVM_runAsm(arg_obj,
// "B0\n"
// "1 REF __key\n"
// "0 RUN __getitem__\n"
// "0 OUT __res\n");
const uint8_t bytes[] = {
0x0c, 0x00, /* instruct array size */
0x10, 0x81, 0x01, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x04, 0x0f,
0x00,
/* instruct array */
0x15, 0x00, /* const pool size */
0x00, 0x5f, 0x5f, 0x6b, 0x65, 0x79, 0x00, 0x5f, 0x5f, 0x67, 0x65,
0x74, 0x5f, 0x5f, 0x00, 0x5f, 0x5f, 0x72, 0x65, 0x73,
0x00, /* const pool */
};
pikaVM_runByteCode(arg_obj, (uint8_t*)bytes);
return arg_copy(args_getArg(arg_obj->list, "__res"));
}
return arg_setNull(NULL);
} }
void PikaStdLib_SysObj___setitem__(PikaObj* self, Arg* PikaStdLib_SysObj___setitem__(PikaObj* self,
Arg* key, Arg* obj,
Arg* obj, Arg* key,
char* obj_str, Arg* val) {
Arg* val) {
ArgType obj_type = arg_getType(obj); ArgType obj_type = arg_getType(obj);
if (ARG_TYPE_STRING == obj_type) { if (ARG_TYPE_STRING == obj_type) {
int index = arg_getInt(key); int index = arg_getInt(key);
char* str_val = arg_getStr(val); char* str_val = arg_getStr(val);
char* str_pyload = arg_getStr(obj); char* str_pyload = arg_getStr(obj);
str_pyload[index] = str_val[0]; str_pyload[index] = str_val[0];
obj_setStr(self, obj_str, str_pyload); return arg_newStr(str_pyload);
} }
if (ARG_TYPE_BYTES == obj_type) { if (ARG_TYPE_BYTES == obj_type) {
int index = arg_getInt(key); int index = arg_getInt(key);
uint8_t* bytes_val = arg_getBytes(val); uint8_t byte_val = 0;
if (ARG_TYPE_BYTES == arg_getType(val)) {
uint8_t* bytes_val = arg_getBytes(val);
byte_val = bytes_val[0];
}
if (ARG_TYPE_INT == arg_getType(val)) {
byte_val = arg_getInt(val);
}
uint8_t* bytes_pyload = arg_getBytes(obj); uint8_t* bytes_pyload = arg_getBytes(obj);
size_t bytes_len = arg_getBytesSize(obj); size_t bytes_len = arg_getBytesSize(obj);
bytes_pyload[index] = bytes_val[0]; bytes_pyload[index] = byte_val;
obj_setBytes(self, obj_str, bytes_pyload, bytes_len); return arg_newBytes(bytes_pyload, bytes_len);
} }
if (argType_isObject(obj_type)) { if (argType_isObject(obj_type)) {
PikaObj* arg_obj = arg_getPtr(obj); PikaObj* arg_obj = arg_getPtr(obj);
obj_setArg(arg_obj, "__key", key); obj_setArg(arg_obj, "__key", key);
obj_setArg(arg_obj, "__val", val); obj_setArg(arg_obj, "__val", val);
// pikaVM_runAsm(arg_obj, /* clang-format off */
// "B0\n" PIKA_PYTHON(
// "1 REF __key\n" __setitem__(__key, __val)
// "1 REF __val\n" )
// "0 RUN __setitem__\n"); /* clang-format on */
const uint8_t bytes[] = { const uint8_t bytes[] = {
0x0c, 0x00, /* instruct array size */ 0x0c, 0x00, /* instruct array size */
0x10, 0x81, 0x01, 0x00, 0x10, 0x01, 0x07, 0x00, 0x00, 0x02, 0x0d, 0x10, 0x81, 0x01, 0x00, 0x10, 0x01, 0x07, 0x00, 0x00, 0x02, 0x0d,
0x00, 0x00,
/* instruct array */ /* instruct array */
0x15, 0x00, /* const pool size */ 0x19, 0x00, /* const pool size */
0x00, 0x5f, 0x5f, 0x6b, 0x65, 0x79, 0x00, 0x5f, 0x5f, 0x76, 0x61, 0x00, 0x5f, 0x5f, 0x6b, 0x65, 0x79, 0x00, 0x5f, 0x5f, 0x76, 0x61,
0x6c, 0x00, 0x5f, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x5f, 0x6c, 0x00, 0x5f, 0x5f, 0x73, 0x65, 0x74, 0x69, 0x74, 0x65, 0x6d,
0x00, /* const pool */ 0x5f, 0x5f, 0x00,
/* const pool */
}; };
pikaVM_runByteCode(arg_obj, (uint8_t*)bytes); pikaVM_runByteCode(arg_obj, (uint8_t*)bytes);
return arg_newRef(arg_obj);
} }
return NULL;
} }
int PikaStdLib_SysObj_len(PikaObj* self, Arg* arg) { int PikaStdLib_SysObj_len(PikaObj* self, Arg* arg) {
@ -277,34 +256,61 @@ int PikaStdLib_SysObj_len(PikaObj* self, Arg* arg) {
if (ARG_TYPE_BYTES == arg_getType(arg)) { if (ARG_TYPE_BYTES == arg_getType(arg)) {
return arg_getBytesSize(arg); return arg_getBytesSize(arg);
} }
if (argType_isObject(arg_getType(arg))) {
PikaObj* arg_obj = arg_getPtr(arg);
Arg* method_arg = obj_getMethodArg(arg_obj, "__len__");
if (NULL != method_arg) {
arg_deinit(method_arg);
/* clang-format off */
PIKA_PYTHON(
__res = __len__()
)
/* clang-format on */
const uint8_t bytes[] = {
0x08, 0x00, /* instruct array size */
0x00, 0x82, 0x01, 0x00, 0x00, 0x04, 0x09, 0x00, /* instruct
array */
0x0f, 0x00, /* const pool size */
0x00, 0x5f, 0x5f, 0x6c, 0x65, 0x6e, 0x5f, 0x5f, 0x00,
0x5f, 0x5f, 0x72, 0x65, 0x73, 0x00, /* const pool */
};
pikaVM_runByteCode(arg_obj, (uint8_t*)bytes);
return obj_getInt(arg_obj, "__res");
}
}
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
__platform_printf("[Error] len: arg type not support\r\n"); __platform_printf("[Error] len: arg type not support\r\n");
return -1; return -1;
} }
Arg* PikaStdLib_SysObj_list(PikaObj* self) { Arg* PikaStdLib_SysObj_list(PikaObj* self) {
#if PIKA_BUILTIN_LIST_ENABLE #if PIKA_BUILTIN_STRUCT_ENABLE
PikaObj* New_PikaStdData_List(Args * args); PikaObj* New_PikaStdData_List(Args * args);
return arg_newMetaObj(New_PikaStdData_List); return arg_newDirectObj(New_PikaStdData_List);
#endif #else
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
__platform_printf("[Error] built-in list is not enabled.\r\n"); __platform_printf("[Error] built-in list is not enabled.\r\n");
return arg_setNull(NULL); return arg_newNull();
#endif
} }
Arg* PikaStdLib_SysObj_dict(PikaObj* self) { Arg* PikaStdLib_SysObj_dict(PikaObj* self) {
#if PIKA_BUILTIN_DICT_ENABLE #if PIKA_BUILTIN_STRUCT_ENABLE
PikaObj* New_PikaStdData_Dict(Args * args); PikaObj* New_PikaStdData_Dict(Args * args);
return arg_newMetaObj(New_PikaStdData_Dict); return arg_newDirectObj(New_PikaStdData_Dict);
#endif #else
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
__platform_printf("[Error] built-in dist is not enabled.\r\n"); __platform_printf("[Error] built-in dist is not enabled.\r\n");
return arg_setNull(NULL); return arg_newNull();
#endif
} }
char* PikaStdLib_SysObj_hex(PikaObj* self, int val) { char* PikaStdLib_SysObj_hex(PikaObj* self, int val) {
char buff[PIKA_SPRINTF_BUFF_SIZE] = {0}; char buff[PIKA_SPRINTF_BUFF_SIZE] = {0};
if (val > 0) { if (val >= 0) {
__platform_sprintf(buff, "0x%02x", val); __platform_sprintf(buff, "0x%02x", val);
} else { } else {
__platform_sprintf(buff, "-0x%02x", -val); __platform_sprintf(buff, "-0x%02x", -val);
@ -333,7 +339,7 @@ Arg* PikaStdLib_SysObj_bytes(PikaObj* self, Arg* val) {
if (ARG_TYPE_INT == type) { if (ARG_TYPE_INT == type) {
int size = arg_getInt(val); int size = arg_getInt(val);
/* src is NULL so the bytes are all '\0' */ /* src is NULL so the bytes are all '\0' */
Arg* bytes = arg_setBytes(NULL, "", NULL, size); Arg* bytes = arg_newBytes(NULL, size);
return bytes; return bytes;
} }
if (ARG_TYPE_BYTES == type) { if (ARG_TYPE_BYTES == type) {
@ -341,12 +347,12 @@ Arg* PikaStdLib_SysObj_bytes(PikaObj* self, Arg* val) {
} }
if (ARG_TYPE_STRING == type) { if (ARG_TYPE_STRING == type) {
int size = strGetSize(arg_getStr(val)); int size = strGetSize(arg_getStr(val));
Arg* bytes = arg_setBytes(NULL, "", (uint8_t*)arg_getStr(val), size); Arg* bytes = arg_newBytes((uint8_t*)arg_getStr(val), size);
return bytes; return bytes;
} }
obj_setErrorCode(self, 1); obj_setErrorCode(self, 1);
__platform_printf("Error: input arg type not supported.\r\n"); __platform_printf("Error: input arg type not supported.\r\n");
return arg_setNull(NULL); return arg_newNull();
} }
Arg* PikaStdLib_SysObj___slice__(PikaObj* self, Arg* PikaStdLib_SysObj___slice__(PikaObj* self,
@ -354,70 +360,7 @@ Arg* PikaStdLib_SysObj___slice__(PikaObj* self,
Arg* obj, Arg* obj,
Arg* start, Arg* start,
int step) { int step) {
#if PIKA_SYNTEX_ITEM_SLICE_ENABLE return __vm_slice(self, end, obj, start, step);
/* No interger index only support __getitem__ */
if (!(arg_getType(start) == ARG_TYPE_INT &&
arg_getType(end) == ARG_TYPE_INT)) {
return PikaStdLib_SysObj___getitem__(self, start, obj);
}
int start_i = arg_getInt(start);
int end_i = arg_getInt(end);
/* __slice__ is equal to __getitem__ */
if (end_i - start_i == 1) {
return PikaStdLib_SysObj___getitem__(self, start, obj);
}
if (ARG_TYPE_STRING == arg_getType(obj)) {
size_t len = strGetSize(arg_getStr(obj));
if (start_i < 0) {
start_i += len;
}
if (end_i < 0) {
end_i += len + 1;
}
Arg* sliced_arg = arg_setStr(NULL, "", "");
for (int i = start_i; i < end_i; i++) {
Arg* i_arg = arg_setInt(NULL, "", i);
Arg* item_arg = PikaStdLib_SysObj___getitem__(self, i_arg, obj);
sliced_arg = arg_strAppend(sliced_arg, arg_getStr(item_arg));
arg_deinit(item_arg);
arg_deinit(i_arg);
}
return sliced_arg;
}
if (ARG_TYPE_BYTES == arg_getType(obj)) {
size_t len = arg_getBytesSize(obj);
if (start_i < 0) {
start_i += len;
}
if (end_i < 0) {
end_i += len + 1;
}
Arg* sliced_arg = arg_setBytes(NULL, "", NULL, 0);
for (int i = start_i; i < end_i; i++) {
Arg* i_arg = arg_setInt(NULL, "", i);
Arg* item_arg = PikaStdLib_SysObj___getitem__(self, i_arg, obj);
uint8_t* bytes_origin = arg_getBytes(sliced_arg);
size_t size_origin = arg_getBytesSize(sliced_arg);
Arg* sliced_arg_new = arg_setBytes(NULL, "", NULL, size_origin + 1);
__platform_memcpy(arg_getBytes(sliced_arg_new), bytes_origin,
size_origin);
__platform_memcpy(arg_getBytes(sliced_arg_new) + size_origin,
arg_getBytes(item_arg), 1);
arg_deinit(sliced_arg);
sliced_arg = sliced_arg_new;
arg_deinit(item_arg);
arg_deinit(i_arg);
}
return sliced_arg;
}
return arg_setNull(NULL);
#else
return PikaStdLib_SysObj___getitem__(self, start, obj);
#endif
} }
static void __print_arg(PikaObj* self, Arg* val) { static void __print_arg(PikaObj* self, Arg* val) {
@ -452,7 +395,7 @@ static void __print_arg(PikaObj* self, Arg* val) {
void PikaStdLib_SysObj_print(PikaObj* self, PikaTuple* val) { void PikaStdLib_SysObj_print(PikaObj* self, PikaTuple* val) {
int arg_size = tuple_getSize(val); int arg_size = tuple_getSize(val);
Arg* print_out_arg = arg_setStr(NULL, "", ""); Arg* print_out_arg = arg_newStr("");
PIKA_BOOL is_get_print = PIKA_FALSE; PIKA_BOOL is_get_print = PIKA_FALSE;
for (int i = 0; i < arg_size; i++) { for (int i = 0; i < arg_size; i++) {
Arg* arg = tuple_getArg(val, i); Arg* arg = tuple_getArg(val, i);
@ -490,6 +433,7 @@ void PikaStdLib_SysObj_printNoEnd(PikaObj* self, Arg* val) {
} }
char* PikaStdLib_SysObj_cformat(PikaObj* self, char* fmt, PikaTuple* var) { char* PikaStdLib_SysObj_cformat(PikaObj* self, char* fmt, PikaTuple* var) {
#if PIKA_SYNTAX_FORMAT_ENABLE
Args buffs = {0}; Args buffs = {0};
pikaMemMaxReset(); pikaMemMaxReset();
char* res = strsFormatList(&buffs, fmt, &var->super); char* res = strsFormatList(&buffs, fmt, &var->super);
@ -497,6 +441,11 @@ char* PikaStdLib_SysObj_cformat(PikaObj* self, char* fmt, PikaTuple* var) {
res = obj_getStr(self, "_buf"); res = obj_getStr(self, "_buf");
strsDeinit(&buffs); strsDeinit(&buffs);
return res; return res;
#else
obj_setErrorCode(self, 1);
__platform_printf("[Error] PIKA_SYNTAX_FORMAT_ENABLE is not enabled.\r\n");
return NULL;
#endif
} }
int PikaStdLib_SysObj_id(PikaObj* self, Arg* obj) { int PikaStdLib_SysObj_id(PikaObj* self, Arg* obj) {
@ -508,3 +457,15 @@ int PikaStdLib_SysObj_id(PikaObj* self, Arg* obj) {
} }
return ptr & (0x7FFFFFFF); return ptr & (0x7FFFFFFF);
} }
PikaObj* PikaStdLib_SysObj_open(PikaObj* self, char* path, char* mode) {
#if PIKA_FILEIO_ENABLE
PikaObj* file = newNormalObj(New_PikaStdData_FILEIO);
PikaStdData_FILEIO_init(file, mode, path);
return file;
#else
obj_setErrorCode(self, 1);
__platform_printf("[Error] PIKA_FILEIO_ENABLE is not enabled.\r\n");
return NULL;
#endif
}

View File

@ -1,10 +1,8 @@
#include "BaseObj.h" #include "BaseObj.h"
#include "PikaVM.h" #include "PikaVM.h"
extern PikaObj* __pikaMain;
void PikaStdTask_Task___init__(PikaObj* self) { void PikaStdTask_Task___init__(PikaObj* self) {
obj_setInt(self, "is_period", 0); obj_setInt(self, "is_period", 0);
obj_setRef(__pikaMain, "__calls", obj_getObj(self, "calls"));
} }
void PikaStdTask_Task_call_always(PikaObj* self, Arg* fun_todo) { void PikaStdTask_Task_call_always(PikaObj* self, Arg* fun_todo) {
@ -90,116 +88,104 @@ void PikaStdTask_Task_call_period_ms(PikaObj* self,
} }
void PikaStdTask_Task_run_once(PikaObj* self) { void PikaStdTask_Task_run_once(PikaObj* self) {
/* transfer the tick to pikaMain */
obj_setInt(__pikaMain, "__tick", obj_getInt(self, "tick"));
/* clang-format off */ /* clang-format off */
PIKA_PYTHON( PIKA_PYTHON(
len = __calls.len() len = calls.len()
mode = 'none' mode = 'none'
info_index = 0 info_index = 0
for i in range(0, len): for i in range(0, len):
if len == 0: if len == 0:
break break
if info_index == 0: if info_index == 0:
mode = __calls[i] mode = calls[i]
info_index = 1 info_index = 1
elif info_index == 1: elif info_index == 1:
if mode == 'always': if mode == 'always':
todo = __calls[i] todo = calls[i]
todo()
info_index = 0
elif mode == 'when':
when = calls[i]
info_index = 2
elif mode == 'period_ms':
period_ms = calls[i]
info_index = 2
elif info_index == 2:
if mode == 'when':
if when():
todo = calls[i]
todo() todo()
info_index = 0 info_index = 0
elif mode == 'when': elif mode == 'period_ms':
when = __calls[i] todo = calls[i]
info_index = 2 info_index = 3
elif mode == 'period_ms': elif info_index == 3:
period_ms = __calls[i] if mode == 'period_ms':
info_index = 2 if tick > calls[i]:
elif info_index == 2: todo()
if mode == 'when': calls[i] = tick + period_ms
if when(): info_index = 0
todo = __calls[i]
todo()
info_index = 0
elif mode == 'period_ms':
todo = __calls[i]
info_index = 3
elif info_index == 3:
if mode == 'period_ms':
if __tick > __calls[i]:
todo()
__calls[i] = __tick + period_ms
info_index = 0
) )
/* clang-format on */ /* clang-format on */
const uint8_t bytes[] = { const uint8_t bytes[] = {
0x60, 0x02, /* instruct array size */ 0xf0, 0x01, /* instruct array size */
0x00, 0x82, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x83, 0x11, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x83, 0x0f, 0x00,
0x00, 0x04, 0x16, 0x00, 0x00, 0x85, 0x1b, 0x00, 0x00, 0x04, 0x1d, 0x00, 0x00, 0x04, 0x14, 0x00, 0x00, 0x85, 0x19, 0x00, 0x00, 0x04, 0x1b, 0x00,
0x20, 0x85, 0x1b, 0x00, 0x20, 0x01, 0x0d, 0x00, 0x10, 0x02, 0x28, 0x00, 0x20, 0x85, 0x19, 0x00, 0x20, 0x01, 0x0b, 0x00, 0x10, 0x02, 0x26, 0x00,
0x00, 0x02, 0x2e, 0x00, 0x00, 0x04, 0x33, 0x00, 0x00, 0x82, 0x37, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x04, 0x31, 0x00, 0x00, 0x82, 0x35, 0x00,
0x00, 0x04, 0x44, 0x00, 0x00, 0x0d, 0x44, 0x00, 0x00, 0x07, 0x46, 0x00, 0x00, 0x04, 0x42, 0x00, 0x00, 0x0d, 0x42, 0x00, 0x00, 0x07, 0x44, 0x00,
0x11, 0x81, 0x0d, 0x00, 0x11, 0x05, 0x1b, 0x00, 0x01, 0x08, 0x48, 0x00, 0x11, 0x81, 0x0b, 0x00, 0x11, 0x05, 0x19, 0x00, 0x01, 0x08, 0x46, 0x00,
0x01, 0x07, 0x4b, 0x00, 0x02, 0x8e, 0x00, 0x00, 0x11, 0x81, 0x1d, 0x00, 0x01, 0x07, 0x49, 0x00, 0x02, 0x8e, 0x00, 0x00, 0x11, 0x81, 0x1b, 0x00,
0x11, 0x05, 0x1b, 0x00, 0x01, 0x08, 0x48, 0x00, 0x01, 0x07, 0x4b, 0x00, 0x11, 0x05, 0x19, 0x00, 0x01, 0x08, 0x46, 0x00, 0x01, 0x07, 0x49, 0x00,
0x12, 0x81, 0x4d, 0x00, 0x12, 0x01, 0x44, 0x00, 0x22, 0x01, 0x44, 0x00, 0x12, 0x81, 0x4b, 0x00, 0x12, 0x01, 0x42, 0x00, 0x02, 0x1d, 0x00, 0x00,
0x22, 0x05, 0x4b, 0x00, 0x12, 0x08, 0x55, 0x00, 0x12, 0x05, 0x4b, 0x00, 0x02, 0x04, 0x14, 0x00, 0x02, 0x85, 0x49, 0x00, 0x02, 0x04, 0x1b, 0x00,
0x02, 0x02, 0x57, 0x00, 0x02, 0x04, 0x16, 0x00, 0x02, 0x85, 0x4b, 0x00, 0x01, 0x8b, 0x49, 0x00, 0x11, 0x01, 0x1b, 0x00, 0x11, 0x05, 0x49, 0x00,
0x02, 0x04, 0x1d, 0x00, 0x01, 0x8b, 0x4b, 0x00, 0x11, 0x01, 0x1d, 0x00, 0x01, 0x08, 0x46, 0x00, 0x01, 0x07, 0x49, 0x00, 0x12, 0x81, 0x14, 0x00,
0x11, 0x05, 0x4b, 0x00, 0x01, 0x08, 0x48, 0x00, 0x01, 0x07, 0x4b, 0x00, 0x12, 0x03, 0x51, 0x00, 0x02, 0x08, 0x46, 0x00, 0x02, 0x07, 0x49, 0x00,
0x12, 0x81, 0x16, 0x00, 0x12, 0x03, 0x61, 0x00, 0x02, 0x08, 0x48, 0x00, 0x13, 0x81, 0x4b, 0x00, 0x13, 0x01, 0x42, 0x00, 0x03, 0x1d, 0x00, 0x00,
0x02, 0x07, 0x4b, 0x00, 0x13, 0x81, 0x4d, 0x00, 0x13, 0x01, 0x44, 0x00, 0x03, 0x04, 0x58, 0x00, 0x03, 0x82, 0x58, 0x00, 0x03, 0x85, 0x19, 0x00,
0x23, 0x01, 0x44, 0x00, 0x23, 0x05, 0x4b, 0x00, 0x13, 0x08, 0x55, 0x00, 0x03, 0x04, 0x1b, 0x00, 0x02, 0x8b, 0x49, 0x00, 0x12, 0x01, 0x14, 0x00,
0x13, 0x05, 0x4b, 0x00, 0x03, 0x02, 0x57, 0x00, 0x03, 0x04, 0x68, 0x00, 0x12, 0x03, 0x5d, 0x00, 0x02, 0x08, 0x46, 0x00, 0x02, 0x07, 0x49, 0x00,
0x03, 0x82, 0x68, 0x00, 0x03, 0x85, 0x1b, 0x00, 0x03, 0x04, 0x1d, 0x00, 0x13, 0x81, 0x4b, 0x00, 0x13, 0x01, 0x42, 0x00, 0x03, 0x1d, 0x00, 0x00,
0x02, 0x8b, 0x4b, 0x00, 0x12, 0x01, 0x16, 0x00, 0x12, 0x03, 0x6d, 0x00, 0x03, 0x04, 0x5d, 0x00, 0x03, 0x85, 0x44, 0x00, 0x03, 0x04, 0x1b, 0x00,
0x02, 0x08, 0x48, 0x00, 0x02, 0x07, 0x4b, 0x00, 0x13, 0x81, 0x4d, 0x00, 0x02, 0x8b, 0x49, 0x00, 0x12, 0x01, 0x14, 0x00, 0x12, 0x03, 0x62, 0x00,
0x13, 0x01, 0x44, 0x00, 0x23, 0x01, 0x44, 0x00, 0x23, 0x05, 0x4b, 0x00, 0x02, 0x08, 0x46, 0x00, 0x02, 0x07, 0x49, 0x00, 0x13, 0x81, 0x4b, 0x00,
0x13, 0x08, 0x55, 0x00, 0x13, 0x05, 0x4b, 0x00, 0x03, 0x02, 0x57, 0x00, 0x13, 0x01, 0x42, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x03, 0x04, 0x62, 0x00,
0x03, 0x04, 0x6d, 0x00, 0x03, 0x85, 0x46, 0x00, 0x03, 0x04, 0x1d, 0x00, 0x03, 0x85, 0x44, 0x00, 0x03, 0x04, 0x1b, 0x00, 0x01, 0x8b, 0x49, 0x00,
0x02, 0x8b, 0x4b, 0x00, 0x12, 0x01, 0x16, 0x00, 0x12, 0x03, 0x72, 0x00, 0x11, 0x01, 0x1b, 0x00, 0x11, 0x05, 0x44, 0x00, 0x01, 0x08, 0x46, 0x00,
0x02, 0x08, 0x48, 0x00, 0x02, 0x07, 0x4b, 0x00, 0x13, 0x81, 0x4d, 0x00, 0x01, 0x07, 0x49, 0x00, 0x12, 0x81, 0x14, 0x00, 0x12, 0x03, 0x5d, 0x00,
0x13, 0x01, 0x44, 0x00, 0x23, 0x01, 0x44, 0x00, 0x23, 0x05, 0x4b, 0x00, 0x02, 0x08, 0x46, 0x00, 0x02, 0x07, 0x49, 0x00, 0x03, 0x82, 0x5d, 0x00,
0x13, 0x08, 0x55, 0x00, 0x13, 0x05, 0x4b, 0x00, 0x03, 0x02, 0x57, 0x00, 0x03, 0x07, 0x49, 0x00, 0x14, 0x81, 0x4b, 0x00, 0x14, 0x01, 0x42, 0x00,
0x03, 0x04, 0x72, 0x00, 0x03, 0x85, 0x46, 0x00, 0x03, 0x04, 0x1d, 0x00, 0x04, 0x1d, 0x00, 0x00, 0x04, 0x04, 0x58, 0x00, 0x04, 0x82, 0x58, 0x00,
0x01, 0x8b, 0x4b, 0x00, 0x11, 0x01, 0x1d, 0x00, 0x11, 0x05, 0x46, 0x00, 0x03, 0x85, 0x19, 0x00, 0x03, 0x04, 0x1b, 0x00, 0x02, 0x8b, 0x49, 0x00,
0x01, 0x08, 0x48, 0x00, 0x01, 0x07, 0x4b, 0x00, 0x12, 0x81, 0x16, 0x00, 0x12, 0x01, 0x14, 0x00, 0x12, 0x03, 0x62, 0x00, 0x02, 0x08, 0x46, 0x00,
0x12, 0x03, 0x6d, 0x00, 0x02, 0x08, 0x48, 0x00, 0x02, 0x07, 0x4b, 0x00, 0x02, 0x07, 0x49, 0x00, 0x13, 0x81, 0x4b, 0x00, 0x13, 0x01, 0x42, 0x00,
0x03, 0x82, 0x6d, 0x00, 0x03, 0x07, 0x4b, 0x00, 0x14, 0x81, 0x4d, 0x00, 0x03, 0x1d, 0x00, 0x00, 0x03, 0x04, 0x58, 0x00, 0x03, 0x85, 0x6c, 0x00,
0x14, 0x01, 0x44, 0x00, 0x24, 0x01, 0x44, 0x00, 0x24, 0x05, 0x4b, 0x00, 0x03, 0x04, 0x1b, 0x00, 0x01, 0x8b, 0x49, 0x00, 0x11, 0x01, 0x1b, 0x00,
0x14, 0x08, 0x55, 0x00, 0x14, 0x05, 0x4b, 0x00, 0x04, 0x02, 0x57, 0x00, 0x11, 0x05, 0x6c, 0x00, 0x01, 0x08, 0x46, 0x00, 0x01, 0x07, 0x49, 0x00,
0x04, 0x04, 0x68, 0x00, 0x04, 0x82, 0x68, 0x00, 0x03, 0x85, 0x1b, 0x00, 0x12, 0x81, 0x14, 0x00, 0x12, 0x03, 0x62, 0x00, 0x02, 0x08, 0x46, 0x00,
0x03, 0x04, 0x1d, 0x00, 0x02, 0x8b, 0x4b, 0x00, 0x12, 0x01, 0x16, 0x00, 0x02, 0x07, 0x49, 0x00, 0x13, 0x81, 0x6e, 0x00, 0x23, 0x01, 0x4b, 0x00,
0x12, 0x03, 0x72, 0x00, 0x02, 0x08, 0x48, 0x00, 0x02, 0x07, 0x4b, 0x00, 0x23, 0x01, 0x42, 0x00, 0x13, 0x1d, 0x00, 0x00, 0x03, 0x08, 0x73, 0x00,
0x13, 0x81, 0x4d, 0x00, 0x13, 0x01, 0x44, 0x00, 0x23, 0x01, 0x44, 0x00, 0x03, 0x07, 0x49, 0x00, 0x04, 0x82, 0x58, 0x00, 0x14, 0x81, 0x4b, 0x00,
0x23, 0x05, 0x4b, 0x00, 0x13, 0x08, 0x55, 0x00, 0x13, 0x05, 0x4b, 0x00, 0x14, 0x01, 0x42, 0x00, 0x24, 0x01, 0x6e, 0x00, 0x24, 0x01, 0x62, 0x00,
0x03, 0x02, 0x57, 0x00, 0x03, 0x04, 0x68, 0x00, 0x03, 0x85, 0x7c, 0x00, 0x14, 0x08, 0x75, 0x00, 0x04, 0x02, 0x77, 0x00, 0x04, 0x04, 0x4b, 0x00,
0x03, 0x04, 0x1d, 0x00, 0x01, 0x8b, 0x4b, 0x00, 0x11, 0x01, 0x1d, 0x00, 0x03, 0x85, 0x19, 0x00, 0x03, 0x04, 0x1b, 0x00, 0x00, 0x86, 0x83, 0x00,
0x11, 0x05, 0x7c, 0x00, 0x01, 0x08, 0x48, 0x00, 0x01, 0x07, 0x4b, 0x00, 0x00, 0x8c, 0x31, 0x00, /* instruct array */
0x12, 0x81, 0x16, 0x00, 0x12, 0x03, 0x72, 0x00, 0x02, 0x08, 0x48, 0x00, 0x86, 0x00, /* const pool size */
0x02, 0x07, 0x4b, 0x00, 0x13, 0x81, 0x7e, 0x00, 0x23, 0x01, 0x4d, 0x00, 0x00, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x00, 0x6c,
0x23, 0x01, 0x44, 0x00, 0x33, 0x01, 0x44, 0x00, 0x33, 0x05, 0x4b, 0x00, 0x65, 0x6e, 0x00, 0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x6d, 0x6f, 0x64, 0x65,
0x23, 0x08, 0x55, 0x00, 0x23, 0x05, 0x4b, 0x00, 0x13, 0x02, 0x57, 0x00, 0x00, 0x30, 0x00, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65,
0x03, 0x08, 0x85, 0x00, 0x03, 0x07, 0x4b, 0x00, 0x04, 0x82, 0x68, 0x00, 0x78, 0x00, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x69, 0x74, 0x65, 0x72,
0x14, 0x81, 0x4d, 0x00, 0x14, 0x01, 0x44, 0x00, 0x24, 0x01, 0x7e, 0x00, 0x00, 0x5f, 0x6c, 0x30, 0x00, 0x5f, 0x6c, 0x30, 0x2e, 0x5f, 0x5f, 0x6e,
0x24, 0x01, 0x72, 0x00, 0x14, 0x08, 0x55, 0x00, 0x14, 0x03, 0x4d, 0x00, 0x65, 0x78, 0x74, 0x5f, 0x5f, 0x00, 0x69, 0x00, 0x32, 0x00, 0x3d, 0x3d,
0x04, 0x02, 0x87, 0x00, 0x03, 0x85, 0x1b, 0x00, 0x03, 0x04, 0x1d, 0x00, 0x00, 0x31, 0x00, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x00, 0x61, 0x6c, 0x77,
0x00, 0x86, 0x8f, 0x00, 0x00, 0x8c, 0x33, 0x00, /* instruct array */ 0x61, 0x79, 0x73, 0x00, 0x74, 0x6f, 0x64, 0x6f, 0x00, 0x77, 0x68, 0x65,
0x92, 0x00, /* const pool size */ 0x6e, 0x00, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x6d, 0x73, 0x00,
0x00, 0x5f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x2e, 0x6c, 0x65, 0x6e, 0x33, 0x00, 0x74, 0x69, 0x63, 0x6b, 0x00, 0x3e, 0x00, 0x2b, 0x00, 0x5f,
0x00, 0x6c, 0x65, 0x6e, 0x00, 0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x6d, 0x6f, 0x5f, 0x73, 0x65, 0x74, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x5f, 0x00, 0x2d,
0x64, 0x65, 0x00, 0x30, 0x00, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x69, 0x6e,
0x64, 0x65, 0x78, 0x00, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x69, 0x74,
0x65, 0x72, 0x00, 0x5f, 0x6c, 0x30, 0x00, 0x5f, 0x6c, 0x30, 0x2e, 0x5f,
0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x5f, 0x00, 0x69, 0x00, 0x32, 0x00,
0x3d, 0x3d, 0x00, 0x31, 0x00, 0x5f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73,
0x00, 0x2b, 0x00, 0x5f, 0x5f, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x5f, 0x5f,
0x00, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x00, 0x74, 0x6f, 0x64, 0x6f,
0x00, 0x77, 0x68, 0x65, 0x6e, 0x00, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64,
0x5f, 0x6d, 0x73, 0x00, 0x33, 0x00, 0x5f, 0x5f, 0x74, 0x69, 0x63, 0x6b,
0x00, 0x3e, 0x00, 0x5f, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x5f, 0x00, 0x2d,
0x31, 0x00, /* const pool */ 0x31, 0x00, /* const pool */
}; };
pikaVM_runByteCode(__pikaMain, (uint8_t*)bytes); pikaVM_runByteCode(self, (uint8_t*)bytes);
} }
void __Task_update_tick(PikaObj* self) { void __Task_update_tick(PikaObj* self) {

View File

@ -1,2 +1,2 @@
pikascript-core==v1.8.7 pikascript-core==v1.10.0
PikaStdLib==v1.8.7 PikaStdLib==v1.10.0