概述

lua是由C语言编写,运行在虚拟机上的弱类型解释型语言。

  • lua变量为什么可以任意改变类型?

切豆腐理论

对于硬盘上保存的数据来说,其本身不具备“意义”,其含义取决于我们如何解释这一段数据

  • 首地址 + 长度 确定内存上的一段数据。
  • 编码/解码 赋予这段数据意义。

TValue

typedef union Value {
struct GCObject *gc; /* collectable objects */
void *p; /* light userdata */
lua_CFunction f; /* light C functions */
lua_Integer i; /* integer numbers */
lua_Number n; /* float numbers */
} Value; #define TValuefields Value value_; lu_byte tt_ typedef struct TValue {
TValuefields;
} TValue;
  • 使用union特性。
  • tt_ 类型(长度)(C语言)。
  • value_ 首地址。

setfltvalue

#define val_(o)		((o)->value_)
#define settt_(o,t) ((o)->tt_=(t))
#define LUA_TNUMBER 3
#define LUA_VNUMFLT makevariant(LUA_TNUMBER, 1) /* float numbers */ #define setfltvalue(obj,x) \
{ TValue *io=(obj); val_(io).n=(x); settt_(io, LUA_VNUMFLT); }

浮点类型编码:

  • val_ 值,n是上述的value_。
  • settt_ 类型。

tonumber

#define rawtt(o)	((o)->tt_)
#define checktag(o,t) (rawtt(o) == (t))
#define ttisfloat(o) checktag((o), LUA_VNUMFLT)
#define check_exp(c,e) (e)
#define fltvalue(o) check_exp(ttisfloat(o), val_(o).n) #define tonumber(o,n) \
(ttisfloat(o) ? (*(n) = fltvalue(o), 1) : luaV_tonumber_(o,n))

浮点类型解码:

  • ttisfloat 类型测试。
  • fltvalue 解码赋给n。
  • luaV_tonumber_ 尝试类型转换。
  • 注意三元运算符和逗号运算符的语义。

Lua5.4源码分析:一. 简述lua变量类型可变特性的实现。的更多相关文章

  1. jQuery 源码分析(十二) 数据操作模块 html特性 详解

    jQuery的属性操作模块总共有4个部分,本篇说一下第1个部分:HTML特性部分,html特性部分是对原生方法getAttribute()和setAttribute()的封装,用于修改DOM元素的特性 ...

  2. 源码分析(4)-ConcurrentHashMap(JDK1.8)

    一.UML类图 ConcurrentHashMap键值不能为null:底层数据结构是数组+链表/红黑二叉树:采用CAS(比较并交换)和synchronized来保证并发安全. CAS文章:https: ...

  3. Lua官方文档与源码分析

    https://www.lua.org/source/5.3/ http://www.cppblog.com/airtrack/archive/2012/09/19/191233.html https ...

  4. [Unity插件]Lua行为树(一):BehaviorDesigner源码分析

    BehaviorDesigner是Unity上的一款行为树插件,不过这个插件是用C#编写的,编写出来的行为树也是依赖于C#的,不利于热更,所以有必要写一个lua版本的. 首先下载BehaviorDes ...

  5. Netty源码分析第5章(ByteBuf)---->第4节: PooledByteBufAllocator简述

    Netty源码分析第五章: ByteBuf 第四节: PooledByteBufAllocator简述 上一小节简单介绍了ByteBufAllocator以及其子类UnPooledByteBufAll ...

  6. ADB 源码分析(一) ——ADB模块简述【转】

    ADB源码分析(一)——ADB模块简述 1.Adb 源码路径(system/core/adb). 2.要想很快的了解一个模块的基本情况,最直接的就是查看该模块的Android.mk文件,下面就来看看a ...

  7. Spark RPC框架源码分析(一)简述

    Spark RPC系列: Spark RPC框架源码分析(一)运行时序 Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(三)运行时序 一. Spark rpc框架概述 S ...

  8. Android源码分析(八)-----系统启动流程&IPC简述

    一 :系统启动流程图 从下往上依次启动linux kernel -->zygote-->SystemServer-->NativeService-->AndroidServic ...

  9. Nmap源码分析(脚本引擎)

    Nmap提供了强大的脚本引擎(NSE),以支持通过Lua编程来扩展Nmap的功能.目前脚本库已经包含300多个常用的Lua脚本,辅助完成Nmap的主机发现.端口扫描.服务侦测.操作系统侦测四个基本功能 ...

  10. JDK Collection 源码分析(2)—— List

    JDK List源码分析 List接口定义了有序集合(序列).在Collection的基础上,增加了可以通过下标索引访问,以及线性查找等功能. 整体类结构 1.AbstractList   该类作为L ...

随机推荐

  1. AI应用实战课学习总结(9)Hello 深度学习

    大家好,我是Edison. 最近入坑黄佳老师的<AI应用实战课>,记录下我的学习之旅,也算是总结回顾. 今天是我们的第9站,一起了解下大数据和GPU时代下的 深度学习 和 PyTorch框 ...

  2. C# 设置dll 别名

    extern alias VideoFFMPEGX64;using VideoFFMPEGX64::Accord.Video.FFMPEG;

  3. React Hooks中memo、useMemo、useCallBack的作用

    一句话概括 memo.useMemo.useCallBack主要用于避免 React 组件的重复渲染,作为 性能优化 的一种手段,你可以根据场景合理的使用它们. React组件的更新机制 在使用mem ...

  4. vmware15.5的解锁mac系统插件

    停止虚拟机服务 执行破解 进入插件MK-Unlocker-VM15.5目录内,右键以管理员权限运行win-install.cmd 查看效果 等待如上的脚本执行完成后,再打开vm,创建虚拟机,看看就有了 ...

  5. 支撑 1300 万月活的幕后真相:Figma 是怎么把核心服务搬上 EKS 的?

    本文由 CloudPilot AI 编译,转载请联系marketing@cloudpilot.ai 近日,设计软件新贵 Figma 正式递交 IPO 申请,有望成为 2025 年规模最大的科技上市案. ...

  6. 最简单的一个 STL格式的网格文件

    简介 最简单格式的一个STL格式的文件 文件内容 solid filenamestl facet normal 1 1 1 outer loop vertex 0 0 1 vertex 0 1 0 v ...

  7. RestCloud ETL 跨库数据聚合运算

    1. 在首页,进入数据源管理 2. 新增数据源,如MySQL 3. 配置数据源信息 4.测试链接.保存退出 5.回到首页,进入数据集成开发平台 6.创建新应用,编辑配置 7.进入刚刚创建的应用,左侧菜 ...

  8. POLIR-Organization-大计(15、10、5年计划)-教材-如何分辨一本好书-十(二/三/四)五规划-引进版(原版/影印/编译版)-自研版:等级(得奖/国家级/省/地)+分级(研究生/本科/大中专/职业院校)

    POLIR-Organization-大计(15.10.5年计划)-教材-十(二/三/四)五规划-等级(得奖/国家级/省/地)+分级(研究生/本科/大中专/职业院校) References: 北京大学 ...

  9. babylon.js 学习笔记(4)

    按上回继续,上节知道了如何用 『方块+三棱柱+贴图』结合起来,画一个简单的小房子,实际应用中可以把这3个打包在一起,组成1个house对象,这样更方便一些 const buildHouse = () ...

  10. 图论 III

    本文主要讲解:网络流,二分图染色,2-sat,差分约束 定义与记号 基本定义 图:一张图 \(G\) 由若干个点和连接这些点的边构成.点的集合称为 点集 \(V\),边的集合称为 边集 \(E\),记 ...