engine.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:rain 作者: scizzorz 项目源码 文件源码
def to_rain(self, val):
    if isinstance(val, (list, tuple)):
      table_box = T.cbox.to_rain(None)
      self.rain_set_table(table_box)

      meta_ptr = self.get_global('core.types.array.module', T.carg)
      self.rain_set_env(table_box, meta_ptr)

      for i, n in enumerate(val):
        self.rain_put_py(table_box, i, self.to_rain(n))

      return table_box

    elif isinstance(val, A.node):
      table_box = T.cbox.to_rain(None)
      self.rain_set_table(table_box)

      ast_ptr = self.get_global('core.ast.module', T.carg)
      meta_ptr = self.rain_get_ptr_py(ast_ptr, val.__tag__)
      if not ct.cast(meta_ptr, ct.c_void_p).value:
        Q.abort('Unable to look up core.ast.{}'.format(val.__tag__))

      self.rain_set_env(table_box, meta_ptr)

      slots = [self.to_rain(getattr(val, key, None)) for key in val.__slots__]

      for key, box in zip(val.__slots__, slots):
        self.rain_put_py(table_box, key, box)

      return table_box

    elif isinstance(val, K.value_token):
      return T.cbox.to_rain(val.value)

    return T.cbox.to_rain(val)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号