`
vyloy
  • 浏览: 80432 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

mudos解释器中lpc数组-=操作的代码分析

阅读更多
void main()
{
    mixed a = [1];
    a += [2];
    a += ["hello"];
    a += [[1,2]];

    a -= [2];
    a -= ["hello"];
    a -= [[1,2]];
    debug_message("%O",a);
}


这段lpc代码会输出什么呢?

我们先从字节码分析吧。

引用

……
002c: short_string "hello"
002e: aggregate 1
0031: local_lvalue LV0
0033: -=
0034: pop
0035: push number 1, number 2
0039: aggregate 2
003c: aggregate 1
003f: local_lvalue LV0
0041: -=
……

-=字节码对应的数组处理代码如下
void f_sub_eq(){
……
case T_ARRAY:
	{
		sp->u.arr = argp->u.arr = subtract_array(argp->u.arr, sp->u.arr);
		sp->u.arr->ref++;
		break;
	}
……
}

subtract_array代码流程如下
  • 先以被减数组大小分配新数组,把要减去的数组堆排序(alist_sort)
  • 再循环被减数组,每个元素用二分方式查找,比较(alist_cmp),没找到则放入新数组
  • 调整新数组大小(realloc),返回结果

在1、2步中,被减数组与减去的数组里的字符串都会判断是不是在共享的字符串池中,如果不是会放入共享字符串池中 。所以字符串的比较是相当于指针比较。但数组也是直接比较地址,由于数组地址不一样,所以没有删除。
int alist_cmp(svalue_t *p1, svalue_t *p2){
	register int d;

	if ( (d = p1->u.number - p2->u.number) )
	{
		return d;
	}
	if ( (d = p1->type - p2->type) )
	{
		return d;
	}
	return 0;
}

所以输出结果:
[1, [1, 2]]

作者:翁志艺
0
0
分享到:
评论

相关推荐

    MudOS_vc2008工程代码

    1. "Mud Server":这个子目录可能包含了MudOS服务器的主要源码,包括主循环、网络处理、LPC解释器等核心模块。 2. LPC代码:除了C++实现,MudOS还包含大量LPC脚本,这些脚本定义了游戏逻辑和玩家交互。 3. 构建...

    fluffos-mudos-v22.02_fluffos下载_os_mudos源码_

    MUDOS,可以看作是“多用户命令解释器”,是早期操作系统中常见的命令行界面,类似于DOS或Unix的shell。在FluffOS中,MUDOS可能是用于用户交互和执行系统命令的核心组件。通过查看MUDOS的源码,我们可以学习到如何...

    Mudos源码_mudos下载_couplesqx_mudos源码_MudOS_

    4. **命令处理器**:Mudos通过命令来控制游戏,这部分代码处理玩家的输入,解析命令并执行相应的操作。 5. **游戏逻辑**:这是mudlib的主要职责,但在源码中可能也会包含一些基础的逻辑,如移动、战斗、交互等。 6...

    fluffos:主动维护的LPMUD驱动程序(LPC解释器,MudOS分支)

    FluffOS仅需很少的代码更改即可支持所有基于LPC的泥浆。 如果您目前仍在使用MudOS,则绝对是时候进行升级了!版本当前版本是v2019。 使用基于cmake的构建系统,它支持在Linux / OSX / Windows(WSL和msys2两者)上...

    MudOS学习教程

    MudOS(LPC)的教程,是学习mud开发的必备教程

    mudos 泥巴服务端

    在Mudos服务端中,开发者可以利用它的功能创建各种角色、物品、场景和事件,通过编写脚本语言实现复杂的交互逻辑。这种灵活性使得每个Mudos游戏都能拥有独特的世界观和游戏规则,极大地提升了玩家的参与度和沉浸感。...

    LPC基础教程

    LPC(Lars Pensjö C)是一种基于C语言的编程语言,主要用于Mudos游戏平台的开发。下面是LPC基础教程的知识点总结: 第一章:编程环境基本介绍 * UNIX基本结构:UNIX是一个多用户、多任务的操作系统,具有三级树状...

    mudos v21c2的帮助手册中文翻译版.

    mudos v21c2的帮助手册中文翻译版. 感谢作者翻译

    chm版的Mudos手册

    Mudos的efun手册,chm中文版,使用起来比较方便。

    Fading Summer mudlib for MudOS-开源

    对于新手开发者而言,这是一个学习LPC和了解MUD开发的绝佳平台,他们可以从源代码中学到实际的编程技巧,并有机会参与到实际项目的建设中。 在提供的压缩包文件列表中,"fadingsummer"可能包含了整个Fading Summer ...

    CISTOMS MudOS mudlib-开源

    《CISTOMS MudOS Mudlib - 开源的LPC世界构建框架》 Mudlib,全称为MUD Library,是MUD(多用户地下城)游戏开发中的核心组件,它提供了一系列的游戏逻辑和功能接口,让开发者可以构建出丰富的虚拟世界。CISTOMS ...

    mudos:mudos 支持 epoll mongodb 64bit big int

    泥土2015 年 3 月 4 日: add redis support in packages/rd.c2012 年 7 月 14 日: add mongodb support in packages/mg.c , mongoc-v0.8.12012 年 7 月 7 日: change lpc int to long suport 64bit2011年初: add...

    繁体中文MUD梦幻七域 fluffos v2017版

    【压缩包子文件的文件名称列表】"mudos-game-ds-master"可能是游戏的源代码仓库,其中的"mudos"可能与MUD游戏有关,"game-ds"可能代表“游戏数据”或者“游戏设计”,而"master"通常在版本控制中指代主分支,即包含...

    基于C++的Fluffos LPMUD驱动程序设计源码

    该项目是基于C++的多语言支持Fluffos LPMUD驱动程序设计源码,包含3835个文件,其中包括1109个Markdown文档、886个C...作为活跃维护的LPMUD驱动(LPC解释器,MudOS分支),该项目为LPMUD游戏服务器提供了强大的支持。

    很久以前的MUD游戏源码和mudos

    很久以前的MUD游戏源码和mudos,给需要和感兴趣的朋友

    fluffos8.0

    "fluffos8.0" 是一个针对2015年发布的新版操作系统,它基于mudos技术,并且特别强调了对64位系统的全面支持。这个系统显然旨在提供更强大的计算性能和优化的资源管理,以适应现代计算机硬件的发展。在64位架构下,...

    服务器常用基本框架.docx

    MudOS还引入了一种名为LPC的脚本语言,用于定义游戏世界的各种元素,如房间布局、NPC和剧情,允许高级玩家通过修改脚本扩展游戏内容。 总结来说,对于弱交互游戏,简单的HTTP服务器配合加密机制可以满足需求,而...

    泥潭4withMySqlForWin32.rar

    5. **项目结构与命名约定**: "nitan4" 和 "nt3mudos" 可能是项目中的源代码目录或者可执行文件,了解项目的目录结构和命名规则有助于我们理解代码组织方式和模块划分。 6. **Windows API调用**: 由于项目是为...

    服务器常用基本框架.doc

    3. **脚本语言**:MUDOS使用LPC(Living Programming Language)脚本语言来定义游戏世界的细节,包括房间布局、配置、NPC和剧情。 4. **动态扩展**:高级玩家(巫师)可以通过修改脚本来扩展和改进游戏内容,提供了...

    西游文字MUD.zip_ableaa9_mud游戏_skinkry_文字游戏_西游类mud

    6. **mudos.exe**:这是MUD游戏的主要执行文件,包含了游戏的服务器端代码,负责处理玩家的连接请求,管理游戏状态,以及与其他玩家的交互。 7. **readme**:通常包含游戏的使用说明、版权信息、开发者联系方式等...

Global site tag (gtag.js) - Google Analytics