开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 0

天高云淡/48_python_study

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
48_python_study
/
python-vm
/
frameobject.py
48_python_study
/
python-vm
/
frameobject.py
frameobject.py 3.47 KB
一键复制 编辑 原始数据 按行查看 历史
天高云淡 提交于 2024年12月09日 14:38 +08:00 . python虚拟机练习
# coding=utf-8
class Block(object):
def __init__(self, _type=0, target=0, level=0):
self.type = _type
self.target = target
self.level = level
class CO_FLAGS(object):
CO_VARARGS = 0x4
CO_VARKEYWORDS = 0x8
CO_GENERATOR = 0x20
class FrameObject:
def __init__(self, codes=None, func=None, args=None, op_arg=None):
self.locals = {}
self.fast_locals = None
if func:
self.globals = func.globals
codes = func.func_code
if func.defaults:
dft_cnt = len(func.defaults)
arg_cnt = codes.arg_count
self.fast_locals = [None for _ in range(arg_cnt)]
while dft_cnt > 0:
dft_cnt -= 1
arg_cnt -= 1
self.fast_locals[arg_cnt] = func.defaults[dft_cnt]
else:
self.globals = self.locals
self.locals["__name__"] = "__main__"
alist = None # 扩展位置参数 *args
adict = None # 扩展键参数 **kwargs
if args:
arg_cnt = codes.arg_count
na = op_arg & 0xFF
nk = op_arg >> 8
if self.fast_locals is None:
self.fast_locals = [None for _ in range(arg_cnt)]
if arg_cnt < na:
for i in range(arg_cnt):
self.fast_locals[i] = args[i]
alist = []
for i in range(arg_cnt, na):
alist.append(args[i])
else:
for i in range(na):
self.fast_locals[i] = args[i]
for i in range(nk):
key = args[na + i * 2]
value = args[na + i * 2 + 1]
if key in codes.var_names:
index = codes.var_names.index(key)
self.fast_locals[index] = value
else:
if adict is None:
adict = dict()
adict[key] = value
if codes.flag & CO_FLAGS.CO_VARARGS:
if alist is None:
alist = []
self.fast_locals.append(alist)
if codes.flag & CO_FLAGS.CO_VARKEYWORDS:
if adict is None:
adict = dict()
self.fast_locals.append(adict)
self.stack = []
self.loop_stack = []
self.consts = codes.consts
self.names = codes.names
self.pc = 0
self._code_object = codes
self.sender = None
self.is_entry_frame = False
def has_more_codes(self):
return self.pc < len(self._code_object.byte_codes)
def get_op_code(self):
op_code = ord(self._code_object.byte_codes[self.pc])
self.pc += 1
return op_code
def get_op_arg(self):
byte1 = ord(self._code_object.byte_codes[self.pc]) & 0xFF
self.pc += 1
byte2 = ord(self._code_object.byte_codes[self.pc]) & 0xFF
self.pc += 1
op_arg = byte2 << 8 | byte1
return op_arg
def push(self, item):
self.stack.append(item)
def pop(self):
return self.stack.pop()
def top(self):
return self.stack[-1]
def get_name(self, index):
return self.names[index]
def get_local(self, key):
return self.locals.get(key, None)
def set_local(self, key, value):
self.locals[key] = value
def stack_level(self):
return len(self.stack)
def is_first_frame(self):
return self.sender is None
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/linux2014/48_python_study.git
git@gitee.com:linux2014/48_python_study.git
linux2014
48_python_study
48_python_study
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /